OpenLiteSpeed ile Vhost Template Kullanarak Toplu Yapılandırma

Onlarca web sitesini tek tek yapılandırmak, her sysadmin’in kabusu haline gelebilir. Özellikle shared hosting ortamlarında veya çok sayıda müşteri sitesi barındıran sunucularda, her virtual host için ayrı ayrı ayar yapmak hem zaman alır hem de tutarsızlıklara yol açar. OpenLiteSpeed’in Virtual Host Template özelliği tam da bu sorunu çözmek için tasarlanmış ve doğru kullanıldığında saatlik işleri dakikalara indirgiyor.

Virtual Host Template Nedir, Neden Kullanmalısınız?

OpenLiteSpeed’de Virtual Host Template, aynı yapılandırma kalıbını paylaşan birden fazla sanal sunucu için tek bir şablon oluşturmanı sağlar. Normalde her domain için ayrı bir vhost yapılandırması yaratman gerekirken, template sistemiyle onlarca siteyi tek bir merkezi noktadan yönetebilirsin.

Örnek senaryo düşün: 50 müşteri sitesi barındırıyorsun ve hepsine PHP 8.2 handler eklemen, mod_security kurallarını güncellemeniz ya da SSL redirect kuralı eklemeniz gerekiyor. Template olmadan bu 50 ayrı düzenleme demek. Template ile 1 değişiklik, 50 sitenin hepsine anında yansıyor.

Temel avantajlar:

  • Merkezi yönetim: Tek noktadan tüm siteleri etkilen değişiklikler yapabilirsin
  • Tutarlılık: Tüm siteler aynı güvenlik ayarları, aynı cache politikasıyla çalışır
  • Hız: Yeni site eklemek dakikalar içinde tamamlanır
  • Hata azaltma: Manuel kopyala-yapıştır hatalarının önüne geçilir

OpenLiteSpeed Yapılandırma Dosyalarına Genel Bakış

Başlamadan önce OpenLiteSpeed’in yapılandırma mimarisini anlamak önemli. OLS, Apache gibi düz metin dosyaları yerine kendi formatını kullanır ve WebAdmin GUI üzerinden yönetilebilir. Ancak CLI tercih edenler için /usr/local/lsws/conf/ dizini her şeyi barındırır.

# OLS yapılandırma dizin yapısı
ls -la /usr/local/lsws/conf/
# httpd_config.conf  -> Ana yapılandırma
# vhosts/            -> Virtual host yapılandırmaları
# templates/         -> Virtual host template'leri (elle oluşturulur)

Ana yapılandırma dosyası httpd_config.conf içinde listener’lar, global ayarlar ve virtual host referansları bulunur. Template sistemi ise hem WebAdmin GUI hem de doğrudan dosya düzenlemesiyle kullanılabilir.

İlk Template’i Oluşturmak: Adım Adım

WebAdmin Panel Üzerinden Template Oluşturma

WebAdmin paneline erişmek için tarayıcıdan https://sunucu_ip:7080 adresine git. Varsayılan kullanıcı adı admin, şifreni kurulum sırasında belirledin.

Configuration > Virtual Hosts > Add Template yolunu izle. Açılan formda şu alanları doldurman gerekiyor:

  • Template Name: php82-standard gibi anlamlı bir isim ver
  • Template File: /usr/local/lsws/conf/templates/php82-standard.conf
  • Listeners: Bu template’i hangi listener’lara bağlayacağını seç
  • Document Root: $VH_ROOT/html/ şeklinde değişken kullan
  • Log Directory: $VH_ROOT/logs/ olarak ayarla

$VH_ROOT, $VH_NAME, $SERVER_ROOT gibi değişkenler template sisteminin can damarıdır. Bu değişkenler her vhost için otomatik olarak doğru değerlerle doldurulur.

Yapılandırma Dosyası ile Template Oluşturma

CLI yolunu tercih ediyorsan, templates dizinini oluşturup doğrudan düzenleyebilirsin:

# Template dizini oluştur
mkdir -p /usr/local/lsws/conf/templates

# Template dosyasını oluştur
nano /usr/local/lsws/conf/templates/php82-standard.conf

Temel bir PHP 8.2 template dosyası şöyle görünür:

# /usr/local/lsws/conf/templates/php82-standard.conf

docRoot                   $VH_ROOT/html
vhDomain                  $VH_NAME
vhAliases                 www.$VH_NAME
adminEmails               admin@$VH_NAME
enableGzip                1
enableIpGeo               0

index  {
  useServer               0
  indexFiles              index.php, index.html
  autoIndex               0
}

log  {
  useServer               0
  logFile                 $VH_ROOT/logs/error.log
  logLevel                ERROR
  rollingSize             10M
  keepDays                30
  accessLog $VH_ROOT/logs/access.log  {
    rollingSize           10M
    keepDays              30
    logFormat             "%h %l %u %t "%r" %>s %b"
    logHeaders            5
    compressArchive       0
  }
}

rewrite  {
  enable                  1
  logLevel                0
}

context /  {
  location                $DOC_ROOT/
  allowBrowse             1
  rewrite  {
    rules                 <<<END_RULES
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
END_RULES
  }
  addDefaultCharset       off
}

PHP Handler Tanımlamak

Template içinde PHP handler’ını doğru tanımlamak kritik. Her template farklı bir PHP versiyonuna yönlendirilebilir, bu da aynı sunucuda farklı PHP versiyonlarıyla çalışan siteleri yönetmeyi kolaylaştırır.

# PHP 8.2 için external app tanımı - httpd_config.conf içine ekle
extprocessor lsphp82 {
  type                    lsapi
  address                 uds://tmp/lshttpd/lsphp82.sock
  maxConns                35
  env                     PHP_LSAPI_CHILDREN=35
  initTimeout             60
  retryTimeout            0
  persistConn             1
  respBuffer              0
  autoStart               1
  path                    /usr/local/lsws/lsphp82/bin/lsphp
  backlog                 100
  instances               1
}

Bu handler’ı template’e bağlamak için template dosyasına script handler eklemen gerekiyor:

# Template dosyasına ekle - php handler bölümü
scripthandler  {
  add                     lsapi:lsphp82 php
}

phpIniOverride  {
  php_value upload_max_filesize 64M
  php_value post_max_size 64M
  php_value memory_limit 256M
  php_value max_execution_time 300
}

Template’i Virtual Host’lara Bağlamak

Template hazır olduğunda, onu yeni veya mevcut virtual host’lara bağlaman gerekiyor. WebAdmin’de Configuration > Virtual Hosts altında bir virtual host oluştur ya da mevcut birini düzenle. Template alanında az önce oluşturduğun php82-standard template’ini seç.

CLI tarafında ise httpd_config.conf içinde virtual host referansı şöyle görünür:

# httpd_config.conf içinde vhost referansı
virtualhost musteri1.com {
  vhRoot                  /home/musteri1/
  configFile              $SERVER_ROOT/conf/vhosts/$VH_NAME/vhconf.conf
  allowSymbolLink         1
  enableScript            1
  restrained              1
  setUIDMode              2
}

Toplu ekleme yapman gerekiyorsa, bir script yazabilirsin:

#!/bin/bash
# toplu_vhost_ekle.sh - Müşteri listesinden vhost oluşturma scripti

MUSTERILER=("musteri1.com" "musteri2.com" "musteri3.com" "musteri4.com")
OLS_CONF="/usr/local/lsws/conf/httpd_config.conf"
VHOST_DIR="/usr/local/lsws/conf/vhosts"
WEB_ROOT="/home"

for DOMAIN in "${MUSTERILER[@]}"; do
    KULLANICI=$(echo $DOMAIN | cut -d'.' -f1)
    
    # Dizin yapısını oluştur
    mkdir -p $WEB_ROOT/$KULLANICI/{html,logs,tmp}
    
    # Sahiplik ayarla
    chown -R $KULLANICI:$KULLANICI $WEB_ROOT/$KULLANICI 2>/dev/null || 
    chown -R nobody:nobody $WEB_ROOT/$KULLANICI
    
    # Vhost conf dizini oluştur
    mkdir -p $VHOST_DIR/$DOMAIN
    
    # Template referansını httpd_config.conf'a ekle
    cat >> $OLS_CONF << EOF

virtualhost $DOMAIN {
  vhRoot                  $WEB_ROOT/$KULLANICI/
  configFile              $SERVER_ROOT/conf/vhosts/$DOMAIN/vhconf.conf
  allowSymbolLink         1
  enableScript            1
  restrained              1
  setUIDMode              2
}
EOF
    
    echo "$DOMAIN icin vhost yapisi olusturuldu"
done

# OLS'yi yeniden yükle
/usr/local/lsws/bin/lswsctrl restart
echo "OpenLiteSpeed yeniden baslatildi"

Gerçek Dünya Senaryosu: WordPress Hosting Ortamı

Diyelim ki bir shared hosting ortamı kuruyorsun ve tüm WordPress siteleri için optimize edilmiş bir template istiyorsun. Bu template’in şunları yapması gerekiyor:

  • WordPress için doğru rewrite kuralları
  • LiteSpeed Cache eklentisiyle uyumlu cache başlıkları
  • Güvenlik için hassas dosyalara erişim engeli
  • PHP-FPM değerleri
# /usr/local/lsws/conf/templates/wordpress-optimized.conf

docRoot                   $VH_ROOT/html
vhDomain                  $VH_NAME
vhAliases                 www.$VH_NAME
enableGzip                1

context /  {
  location                $DOC_ROOT/
  allowBrowse             1
  
  rewrite  {
    rules                 <<<END_RULES
RewriteEngine On
RewriteBase /

# WordPress ana rewrite kuralları
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# wp-config.php'ye erişimi engelle
RewriteRule ^wp-config.php$ - [F,L]
END_RULES
  }
}

# Hassas dosyalara erişimi engelle
context /.htaccess  {
  location              $DOC_ROOT/.htaccess
  accessControl  {
    deny                all
  }
}

context /wp-content/uploads/  {
  location              $DOC_ROOT/wp-content/uploads/
  allowBrowse           0
  rewrite  {
    rules               <<<END_RULES
RewriteEngine On
RewriteRule .php$ - [F]
END_RULES
  }
}

# LiteSpeed Cache için ESI ayarı
esiEnabled              1

log  {
  useServer             0
  logFile               $VH_ROOT/logs/error.log
  logLevel              WARN
  rollingSize           10M
  keepDays              14
}

Template Override: Bireysel Vhost Özelleştirmeleri

Template sistemi tamamen katı değil. Bazı durumlarda belirli bir sitenin template’ten farklı davranması gerekebilir. Örneğin müşterilerden biri farklı PHP versiyonu ya da özel bir rewrite kuralı isteyebilir.

Bunun için virtual host’un kendi vhconf.conf dosyasına ek ayarlar koyabilirsin. Template ayarları temel oluştururken, vhost özgü ayarlar override eder:

# /usr/local/lsws/conf/vhosts/ozel-musteri.com/vhconf.conf
# Sadece template'ten farklı olan ayarlar buraya yazılır

# Bu müşteri PHP 8.1 kullanıyor
scripthandler  {
  add                   lsapi:lsphp81 php
}

# Ek bir subdirectory context
context /api/  {
  location              $DOC_ROOT/api/
  allowBrowse           1
  extraHeaders          <<<END_HEADERS
X-Custom-Header value
Access-Control-Allow-Origin: *
END_HEADERS
}

SSL Yapılandırması Template’e Entegrasyonu

Modern web ortamında SSL zorunlu. Template içinde SSL listener’ı referans alabilir ve her site için sertifika yollarını değişkenlerle dinamik hale getirebilirsin:

# Listener tanımı - httpd_config.conf içinde
listener HTTPS {
  address               *:443
  secure                1
  keyFile               /etc/letsencrypt/live/$VH_NAME/privkey.pem
  certFile              /etc/letsencrypt/live/$VH_NAME/fullchain.pem
  sslProtocol           24
  ciphers               ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384
  enableECDHE           1
  renegProtection       1
  sslSessionCache       1
  enableSpdy            15
  enableQuic            1
}

Toplu SSL sertifikası almak için ayrı bir script:

#!/bin/bash
# toplu_ssl.sh - Tüm müşteri domainlerine Let's Encrypt sertifikası al

DOMAIN_LISTESI="/home/sysadmin/domain_listesi.txt"

while IFS= read -r DOMAIN; do
    echo "Sertifika aliniyor: $DOMAIN"
    
    certbot certonly 
        --webroot 
        -w /home/$(echo $DOMAIN | cut -d'.' -f1)/html 
        -d $DOMAIN 
        -d www.$DOMAIN 
        --non-interactive 
        --agree-tos 
        --email [email protected] 
        --quiet
    
    if [ $? -eq 0 ]; then
        echo "$DOMAIN: Sertifika basariyla alindi"
    else
        echo "$DOMAIN: Sertifika alinamadi, manuel kontrol gerekli" >> /var/log/ssl_hata.log
    fi
    
    # Rate limit asmamak için kısa bekleme
    sleep 2
    
done < "$DOMAIN_LISTESI"

# OLS sertifikaları yüklemesi için graceful restart
/usr/local/lsws/bin/lswsctrl reload

Template Değişikliklerini Canlıya Alma

Template üzerinde değişiklik yaptıktan sonra tüm bağlı sitelere yansıması için OpenLiteSpeed’i graceful restart etmek yeterli. Graceful restart aktif bağlantıları kesmeden yeni yapılandırmayı yükler:

# Yapılandırma doğruluğunu test et
/usr/local/lsws/bin/lswsctrl configtest

# Graceful restart - aktif bağlantılar kesilmez
/usr/local/lsws/bin/lswsctrl restart

# Sadece yapılandırma yenile (daha hızlı)
/usr/local/lsws/bin/lswsctrl reload

# Servis durumunu kontrol et
/usr/local/lsws/bin/lswsctrl status

Bir değişikliği canlıya almadan önce şu kontrol listesini takip etmenizi öneririm:

  • Syntax kontrolü: configtest ile yapılandırma hatası olmadığından emin ol
  • Test ortamı: Mümkünse bir test vhost’unda değişikliği önce dene
  • Log izleme: Restart sonrası /usr/local/lsws/logs/error.log dosyasını canlı izle
  • Hızlı rollback: Değişikliği yapmadan önce template dosyasını yedekle

Yaygın Sorunlar ve Çözümleri

Problem: Template değişikliği bazı sitelere yansımıyor.

Neden olabilir? Virtual host’un kendi vhconf.conf dosyasında template’i override eden bir ayar vardır. Şunu çalıştır:

# Hangi vhost'ların kendi scripthandler'ı olduğunu bul
grep -rl "scripthandler" /usr/local/lsws/conf/vhosts/

# Bir vhost'un template'e bağlı olup olmadığını kontrol et
grep -l "useTemplate" /usr/local/lsws/conf/vhosts/*/vhconf.conf

Problem: Yeni eklenen vhost template’i tanımıyor.

httpd_config.conf içinde virtual host tanımında template referansının doğru yazıldığından emin ol. Ayrıca template dosyasının gerçekten var olduğunu doğrula:

# Template dosyasının varlığını kontrol et
ls -la /usr/local/lsws/conf/templates/

# OLS log dosyasında template ile ilgili hata var mı?
grep -i "template" /usr/local/lsws/logs/error.log | tail -20

Problem: Değişkenler expand edilmiyor, $VH_NAME gibi ifadeler olduğu gibi kalıyor.

Bu genellikle syntax hatasından kaynaklanır. Template dosyasında her bloğun açılıp kapandığından emin ol ve whitespace hatalarına dikkat et.

İzleme ve Bakım

Template tabanlı bir ortamı uzun vadede sağlıklı tutmak için düzenli kontroller önemli:

#!/bin/bash
# template_saglik_kontrol.sh

echo "=== OpenLiteSpeed Template Saglik Kontrol ==="
echo "Tarih: $(date)"
echo ""

# OLS process kontrolü
if pgrep -x "lshttpd" > /dev/null; then
    echo "[OK] OpenLiteSpeed calisiyor"
else
    echo "[HATA] OpenLiteSpeed CALISMIYOR!"
fi

# Template dosyaları varlık kontrolü
for TEMPLATE in /usr/local/lsws/conf/templates/*.conf; do
    if [ -f "$TEMPLATE" ]; then
        echo "[OK] Template mevcut: $TEMPLATE"
    fi
done

# Vhost sayısı
VHOST_SAYISI=$(ls /usr/local/lsws/conf/vhosts/ | wc -l)
echo "Toplam virtual host sayisi: $VHOST_SAYISI"

# Son 24 saat hata log kontrolü
HATA_SAYISI=$(grep -c "ERROR|CRITICAL" /usr/local/lsws/logs/error.log 
  2>/dev/null || echo "0")
echo "Son 24 saat hata sayisi: $HATA_SAYISI"

# Disk kullanımı
echo ""
echo "Log dizini disk kullanimi:"
du -sh /usr/local/lsws/logs/
du -sh /home/*/logs/ 2>/dev/null | sort -rh | head -10

Bu scripti cron ile günlük çalıştırabilir, çıktıyı e-posta ile alabilirsin:

# Crontab'a ekle
0 8 * * * /home/sysadmin/scripts/template_saglik_kontrol.sh | 
  mail -s "OLS Saglik Raporu - $(hostname)" [email protected]

Sonuç

OpenLiteSpeed Virtual Host Template sistemi, özellikle çok siteli ortamlarda yönetim karmaşıklığını dramatik biçimde azaltıyor. Doğru tasarlanmış bir template yapısıyla;

  • Yeni müşteri eklemek 30 dakikadan 3 dakikaya iniyor
  • Güvenlik güncellemeleri tüm sitelere anında yayılıyor
  • Yapılandırma tutarsızlıklarından kaynaklanan destek talepleri azalıyor
  • Ekip içinde standartlaşma sağlanıyor

Başlangıçta template tasarımına vakit harcamak, ilerleyen dönemde sizi büyük bir operasyonel yükten kurtarır. Küçük bir ortam için bile en azından PHP handler ve temel rewrite kurallarını kapsayan bir template oluşturmak, kısa sürede karşılığını verir.

Önemli bir not: Template değişiklikleri tüm bağlı siteleri etkiler, bu yüzden production ortamında değişiklik yapmadan önce mutlaka bir test ortamında deneyin ve her zaman yedek alın. Graceful restart’ın aktif bağlantıları kesmediğini bilmek güven verse de, kritik değişiklikler için yoğunluğun düşük olduğu saatleri seçmek her zaman akıllıca bir yaklaşım.

Yorum yapın