OpenLiteSpeed ile Virtual Host ve Domain Yönetimi

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.

Yorum yapın