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-standardgibi 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ü:
configtestile 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.logdosyası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.