Web sunucusu yönetimi deneyimliyseniz, Apache veya Nginx’ten OpenLiteSpeed’e geçiş yaparken en çok kafanızı karıştıran konu muhtemelen virtual host yapılandırması olmuştur. OpenLiteSpeed, hem web arayüzü hem de konfigurasyon dosyaları üzerinden yönetilebilen hibrit bir yapıya sahip ve bu esneklik bazen karmaşıklığa dönüşebiliyor. Bu yazıda OpenLiteSpeed üzerinde virtual host oluşturmayı, domain yönetimini ve sık karşılaşılan senaryoları adım adım ele alacağım.
OpenLiteSpeed’in Virtual Host Yapısı
OpenLiteSpeed’in konfigurasyon yapısı Apache’den oldukça farklı. Ana konfigurasyon /usr/local/lsws/conf/httpd_config.conf dosyasında bulunuyor. Virtual host’lar ise /usr/local/lsws/conf/vhosts/ dizini altında her domain için ayrı klasörler şeklinde organize ediliyor.
Temel dizin yapısı şu şekilde:
/usr/local/lsws/
├── conf/
│ ├── httpd_config.conf # Ana konfigurasyon
│ └── vhosts/
│ ├── example.com/
│ │ └── vhconf.conf # Virtual host konfigurasyon
│ └── test.com/
│ └── vhconf.conf
├── logs/ # Genel loglar
└── Example/ # Örnek virtual host root
Bu yapıyı anlamak önemli çünkü web arayüzünden yaptığınız her değişiklik aslında bu dosyalara yazılıyor. Yani dosyaları doğrudan düzenleyebilir veya web arayüzünü kullanabilirsiniz, ikisi de çalışır.
İlk Virtual Host Oluşturma
Web Arayüzü Üzerinden
OpenLiteSpeed admin paneline https://sunucu-ip:7080 adresinden erişiyorsunuz. Varsayılan kullanıcı adı admin, şifre ise kurulum sırasında belirlediğiniz değer.
Admin panelinde Virtual Hosts bölümüne gidin ve sağ üstteki artı ikonuna tıklayın. Açılan formda şu alanları doldurun:
- Virtual Host Name: Tanımlayıcı bir isim (örneğin
example_com) - Virtual Host Root: Web dosyalarının bulunacağı ana dizin
- Config File: Konfigurasyon dosyasının yolu
- Enable Scripts/ExtApps: PHP gibi harici uygulamalar için evet
- Restrained: Güvenlik için virtual host’u kendi dizinine kısıtla
Komut Satırından Manuel Oluşturma
Ben genellikle birden fazla domain eklerken komut satırını tercih ediyorum, daha hızlı. Önce gerekli dizinleri oluşturalım:
# Domain dizinlerini oluştur
sudo mkdir -p /var/www/example.com/{public_html,logs,ssl}
sudo mkdir -p /var/www/example.com/public_html
# Sahipliği ayarla (nobody kullanıcısı OLS'un çalıştığı kullanıcı)
sudo chown -R nobody:nogroup /var/www/example.com
sudo chmod -R 755 /var/www/example.com
# Virtual host konfigurasyon dizini oluştur
sudo mkdir -p /usr/local/lsws/conf/vhosts/example.com
Şimdi virtual host konfigurasyon dosyasını oluşturalım:
sudo nano /usr/local/lsws/conf/vhosts/example.com/vhconf.conf
Dosyaya şu içeriği ekleyin:
docRoot /var/www/example.com/public_html/
vhDomain example.com
vhAliases www.example.com
adminEmails [email protected]
enableGzip 1
enableIpGeo 0
index {
useServer 0
indexFiles index.php, index.html
autoIndex 0
}
accessLog {
fileName /var/www/example.com/logs/access.log
pipedLogger 0
logFormat combined
logHeaders 5
rollingSize 100M
keepDays 30
compressArchive 1
}
errorLog {
fileName /var/www/example.com/logs/error.log
logLevel ERROR
rollingSize 10M
keepDays 30
}
rewrite {
enable 1
autoLoadHtaccess 1
logLevel 0
}
vhssl {
keyFile /var/www/example.com/ssl/example.com.key
certFile /var/www/example.com/ssl/example.com.crt
certChain 1
}
Ana Konfigurasyon Dosyasına Virtual Host Ekleme
Virtual host dosyasını oluşturduktan sonra ana konfigurasyon dosyasına listener ile bağlamanız gerekiyor. /usr/local/lsws/conf/httpd_config.conf dosyasını açın ve mevcut virtualhost bloklarının altına şunu ekleyin:
virtualhost example.com {
vhRoot /usr/local/lsws/conf/vhosts/example.com/
configFile $VH_ROOT/vhconf.conf
allowSymbolLink 1
enableScript 1
restrained 1
setUIDMode 0
}
Ardından listener bloğuna domain eşlemesini ekleyin:
listener Default {
# Mevcut listener ayarları...
map example.com example.com
}
Değişiklikleri uygulamak için servisi yeniden başlatın:
sudo systemctl restart lsws
# veya graceful restart için
sudo /usr/local/lsws/bin/lswsctrl restart
PHP Uygulaması için Virtual Host Yapılandırma
WordPress, Laravel veya başka bir PHP uygulaması çalıştırıyorsanız, PHP işleyicisini virtual host’a bağlamanız gerekiyor. Önce bir PHP işleyicisinin tanımlı olduğundan emin olun.
Admin panelinde External Apps bölümüne gidin ve PHP-FPM veya LiteSpeed SAPI işleyicisini kontrol edin. Genellikle lsphp74 veya lsphp81 gibi isimlerle görünür.
Virtual host konfigurasyon dosyasına PHP yapılandırmasını ekleyin:
scripthandler {
add lsapi:lsphp81 php
}
extprocessor lsphp81 {
type lsapi
address uds://tmp/lshttpd/lsphp81.sock
maxConns 35
env PHP_LSAPI_CHILDREN=35
initTimeout 60
retryTimeout 0
persistConn 1
pcKeepAliveTimeout 1
respBuffer 0
autoStart 2
path /usr/local/lsws/lsphp81/bin/lsphp
backlog 100
instances 1
priority 0
memSoftLimit 2047M
memHardLimit 2047M
procSoftLimit 400
procHardLimit 500
}
WordPress için Özel Rewrite Kuralları
WordPress kullanan bir site için .htaccess dosyasını veya doğrudan vhconf.conf içine rewrite kurallarını ekleyebilirsiniz. OpenLiteSpeed .htaccess dosyalarını okuyabilir ama doğrudan konfigurasyon dosyasına yazmak daha performanslı.
/var/www/example.com/public_html/.htaccess dosyası oluşturun:
# WordPress için standart rewrite kuralları
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# Güvenlik başlıkları
<IfModule mod_headers.c>
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set X-XSS-Protection "1; mode=block"
</IfModule>
# Gzip sıkıştırma
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain text/html text/xml
AddOutputFilterByType DEFLATE text/css application/javascript
AddOutputFilterByType DEFLATE application/json
</IfModule>
SSL/TLS Sertifikası Yapılandırma
Modern web için SSL zorunlu. OpenLiteSpeed ile Let’s Encrypt entegrasyonu oldukça kolay.
Certbot ile Let’s Encrypt Sertifikası
# Certbot kur
sudo apt install certbot -y
# Standalone mod ile sertifika al (80 portunu geçici kapat)
sudo systemctl stop lsws
sudo certbot certonly --standalone -d example.com -d www.example.com
sudo systemctl start lsws
# Veya webroot modu ile (servis durdurmadan)
sudo certbot certonly --webroot -w /var/www/example.com/public_html
-d example.com -d www.example.com
Sertifika alındıktan sonra virtual host konfigurasyon dosyasındaki ssl bloğunu güncelleyin:
vhssl {
keyFile /etc/letsencrypt/live/example.com/privkey.pem
certFile /etc/letsencrypt/live/example.com/fullchain.pem
certChain 1
sslProtocol 24
ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256
enableECDHE 1
enableDHE 1
renegProtection 1
sslSessionCache 1
sslSessionTickets 0
enableSpdy 15
enableQuic 1
}
sslProtocol 24 değeri TLS 1.2 ve TLS 1.3’ü etkinleştirir (8 + 16 = 24 bitwise OR). Eski TLS sürümlerini desteklemenize gerek yok.
Otomatik yenileme için bir cron job ekleyin:
sudo crontab -e
# Şu satırı ekleyin
0 3 * * * /usr/bin/certbot renew --quiet && /usr/local/lsws/bin/lswsctrl restart
Birden Fazla Domain Yönetimi
Gerçek dünya senaryosunda bir sunucuda 10-20 domain çalıştırmanız gerekebilir. Bunun için bir script hazırlamak hayat kurtarır.
#!/bin/bash
# create_vhost.sh - OpenLiteSpeed virtual host oluşturma scripti
DOMAIN=$1
WEBROOT="/var/www/$DOMAIN/public_html"
LOGDIR="/var/www/$DOMAIN/logs"
SSLDIR="/var/www/$DOMAIN/ssl"
VHCONF="/usr/local/lsws/conf/vhosts/$DOMAIN"
if [ -z "$DOMAIN" ]; then
echo "Kullanim: $0 domain.com"
exit 1
fi
# Dizinleri oluştur
mkdir -p "$WEBROOT" "$LOGDIR" "$SSLDIR"
chown -R nobody:nogroup "/var/www/$DOMAIN"
chmod -R 755 "/var/www/$DOMAIN"
mkdir -p "$VHCONF"
# Test sayfası oluştur
cat > "$WEBROOT/index.html" << EOF
<!DOCTYPE html>
<html>
<head><title>$DOMAIN - Hazır</title></head>
<body>
<h1>$DOMAIN başarıyla yapılandırıldı!</h1>
<p>Sunucu: OpenLiteSpeed</p>
</body>
</html>
EOF
# Virtual host konfigurasyon dosyası oluştur
cat > "$VHCONF/vhconf.conf" << EOF
docRoot $WEBROOT/
vhDomain $DOMAIN
vhAliases www.$DOMAIN
adminEmails admin@$DOMAIN
enableGzip 1
index {
useServer 0
indexFiles index.php, index.html
autoIndex 0
}
accessLog {
fileName $LOGDIR/access.log
logFormat combined
rollingSize 100M
keepDays 30
}
errorLog {
fileName $LOGDIR/error.log
logLevel ERROR
rollingSize 10M
keepDays 30
}
rewrite {
enable 1
autoLoadHtaccess 1
}
scripthandler {
add lsapi:lsphp81 php
}
EOF
echo "Virtual host $DOMAIN oluşturuldu."
echo "Şimdi /usr/local/lsws/conf/httpd_config.conf dosyasına virtual host tanımını eklemeyi unutmayın."
echo "Ardından: sudo /usr/local/lsws/bin/lswsctrl restart"
Script’i çalıştırılabilir yapın:
chmod +x create_vhost.sh
sudo ./create_vhost.sh yenidomain.com
Subdomain Yönetimi
Subdomain’ler için iki yaklaşım var: Ayrı virtual host veya mevcut virtual host üzerinde alias. Genellikle ayrı virtual host daha temiz bir yönetim sağlar.
blog.example.com için:
sudo mkdir -p /var/www/blog.example.com/public_html
sudo mkdir -p /usr/local/lsws/conf/vhosts/blog.example.com
/usr/local/lsws/conf/vhosts/blog.example.com/vhconf.conf:
docRoot /var/www/blog.example.com/public_html/
vhDomain blog.example.com
adminEmails [email protected]
enableGzip 1
index {
useServer 0
indexFiles index.php, index.html
autoIndex 0
}
accessLog {
fileName /var/www/blog.example.com/logs/access.log
rollingSize 100M
keepDays 30
}
errorLog {
fileName /var/www/blog.example.com/logs/error.log
logLevel ERROR
}
rewrite {
enable 1
autoLoadHtaccess 1
}
Ana konfigurasyon dosyasına ekleyin:
virtualhost blog.example.com {
vhRoot /usr/local/lsws/conf/vhosts/blog.example.com/
configFile $VH_ROOT/vhconf.conf
allowSymbolLink 1
enableScript 1
restrained 1
}
Ve listener’a map ekleyin:
map blog.example.com blog.example.com
HTTP’den HTTPS’e Yönlendirme
HTTP trafiğini otomatik olarak HTTPS’e yönlendirmek için virtual host konfigurasyon dosyasına rewrite kuralı ekleyin:
rewrite {
enable 1
autoLoadHtaccess 1
rules <<<END_rules
if ($HTTPS == '') {
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
}
END_rules
}
Bu yöntemi kullanmak yerine .htaccess dosyasını tercih ediyorsanız:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Cache Yapılandırması
OpenLiteSpeed’in en güçlü özelliklerinden biri LiteSpeed Cache (LSCache). Bu özelliği virtual host seviyesinde aktifleştirmek performansı dramatik biçimde artırır.
Virtual host konfigurasyon dosyasına cache bloğu ekleyin:
module cache {
cacheDefaultPolicy cache=1, public, no-vary
cacheStorePath /tmp/lscache
checkPrivateCache 1
checkPublicCache 1
maxCacheObjSize 10000000
maxStaleAge 200
qsCache 1
reqCookieCache 1
respCookieCache 1
ignoreReqCacheCtrl 1
ignoreRespCacheCtrl 0
enableCache 0
expireInSeconds 3600
enablePrivateCache 0
privateExpireInSeconds 3600
}
WordPress kullanıyorsanız LiteSpeed Cache eklentisini kurun, konfigurasyon bu eklenti üzerinden yönetilir ve çok daha kapsamlı seçenekler sunar.
Sorun Giderme
Konfigurasyon Hatalarını Kontrol Etme
Herhangi bir değişiklik sonrasında konfigurasyon dosyasını doğrulamak için:
# Konfigurasyon testini çalıştır
sudo /usr/local/lsws/bin/lswsctrl config test
# Servis durumunu kontrol et
sudo systemctl status lsws
# Hata loglarını izle
sudo tail -f /usr/local/lsws/logs/error.log
# Spesifik domain log'u
sudo tail -f /var/www/example.com/logs/error.log
Yaygın Hatalar ve Çözümleri
403 Forbidden hatası: Genellikle dizin izinlerinden kaynaklanır.
sudo chown -R nobody:nogroup /var/www/example.com
sudo find /var/www/example.com -type d -exec chmod 755 {} ;
sudo find /var/www/example.com -type f -exec chmod 644 {} ;
502 Bad Gateway hatası: PHP işleyicisi çalışmıyordur. PHP sürecini yeniden başlatın:
sudo systemctl restart lsws
# PHP-FPM kullanıyorsanız
sudo systemctl restart php8.1-fpm
Virtual host bulunamıyor: Ana konfigurasyon dosyasında map tanımını kontrol edin ve listener ile virtual host adlarının eşleştiğinden emin olun.
SSL sertifikası hataları: Dosya yollarını ve izinlerini kontrol edin:
sudo ls -la /etc/letsencrypt/live/example.com/
sudo openssl x509 -in /etc/letsencrypt/live/example.com/fullchain.pem -text -noout | grep "Subject:"
Admin Paneli ile Dosya Senkronizasyonu
Admin panelinden yaptığınız değişiklikler dosyalara yazılır, dosyalardan yaptığınız değişiklikler ise admin panelinde servis restart olmadan görünmez. Bu yüzden değişiklik yaptıktan sonra her zaman Graceful Restart yapın. Admin panelinde sol üstteki yeşil “Restart” butonu bu işi yapar, aktif bağlantıları kesmeden yapılandırmayı yeniden yükler.
Komut satırından graceful restart:
sudo /usr/local/lsws/bin/lswsctrl restart
Bu komut kill -USR1 sinyali gönderir ve sunucu aktif bağlantıları tamamladıktan sonra yeniden başlar. Üretim ortamında her zaman bu yöntemi kullanın.
Sonuç
OpenLiteSpeed ile virtual host yönetimi, bir kez alışınca oldukça mantıklı ve temiz bir sistem. Konfigurasyon dosyaları okunabilir, web arayüzü işlevsel ve LSCache gibi eklentilerle entegrasyon mükemmel. Apache’den geliyorsanız en büyük fark konfigurasyon sözdizimi ve PHP işleyici mantığı. Nginx’ten geliyorsanız ise .htaccess desteğini tekrar kazanmak hoş bir sürpriz olacak.
Pratik önerim: Üretim sunucusuna geçmeden önce bir test ortamında en az 5-6 farklı domain yapılandırması yapın. Konfigurasyon dosyalarını bir Git repository’de takip etmek de büyük kolaylık sağlıyor; özellikle birden fazla sysadmin’in yönettiği sunucularda kimin ne değiştirdiğini görmek için paha biçilmez. Virtual host konfigurasyon dizinini /usr/local/lsws/conf/vhosts/ altındaki tüm .conf dosyalarını versiyonlarsanız, geri alma işlemleri çok daha kolay olur.