Bant genişliği yönetimi, özellikle paylaşımlı hosting ortamlarında veya kaynak kısıtlı sunucularda en kritik konulardan biri. OpenLiteSpeed bu konuda oldukça esnek bir yapı sunuyor ama dokümentasyon biraz dağınık olduğundan “nasıl yapılandırılır” sorusunun cevabını bulmak zaman alıyor. Bu yazıda OpenLiteSpeed üzerinde bandwidth throttling’i hem web arayüzü hem de konfigurasyon dosyaları üzerinden nasıl yapılandıracağınızı, gerçek dünya senaryolarıyla birlikte anlatacağım.
OpenLiteSpeed’de Bandwidth Throttling Nedir?
OpenLiteSpeed, istemcilere gönderilen veri hızını sınırlandırma konusunda birkaç farklı mekanizma sunuyor. Bunları kabaca ikiye ayırabiliriz:
- Connection Throttling: Tek bir bağlantı için maksimum gönderim hızı
- Per-IP Throttling: Belirli bir IP adresinden gelen tüm bağlantılar için toplam hız sınırı
Bu iki mekanizmayı doğru kombine etmek, hem tek bir kullanıcının sunucuyu ezmesini önler hem de genel sistem performansını korur. Örneğin bir video hosting sitesi işletiyorsanız, bir kullanıcının gigabit bağlantınızın tamamını tek başına tüketmesini istemezsiniz.
Temel Kavramlar ve Birimler
Konfigurasyon yazmadan önce OpenLiteSpeed’in hız sınırlama birimlerini anlamak gerekiyor. OLS tüm hız değerlerini bytes/saniye cinsinden alıyor. Bu yüzden kafanızın karışmaması için şu dönüşümleri aklınızda tutun:
- 1 KB/s = 1024 bytes/saniye
- 1 MB/s = 1048576 bytes/saniye
- 100 KB/s = 102400 bytes/saniye
- 500 KB/s = 512000 bytes/saniye
Ayrıca OLS’nin throttling değerlerini “0” olarak girdiğinizde sınırsız anlamına geldiğini bilmeniz önemli. Yanlışlıkla 0 girip neden çalışmıyor diye saatlerce bakabilirsiniz.
Konfigurasyon Dosyası Yapısı
OpenLiteSpeed’in ana konfigurasyon dosyası /usr/local/lsws/conf/httpd_config.conf konumundadır. Virtual host konfigürasyonları ise /usr/local/lsws/conf/vhosts/ altında her site için ayrı klasörlerde tutulur.
# Konfigurasyon dosyalarının konumunu kontrol edelim
ls -la /usr/local/lsws/conf/
ls -la /usr/local/lsws/conf/vhosts/
# Ana konfig dosyasını görüntüle
cat /usr/local/lsws/conf/httpd_config.conf | grep -i throttle
Sunucu Genelinde Throttling Yapılandırması
httpd_config.conf Üzerinden
Sunucu genelinde bant genişliği sınırlaması için ana konfigurasyon dosyasını düzenliyoruz. Bu ayarlar tüm virtual host’ları etkiler.
# Ana konfigurasyon dosyasını düzenle
nano /usr/local/lsws/conf/httpd_config.conf
Dosya içinde tuning bloğunu bulun veya yoksa oluşturun:
tuning {
maxConnections 2000
maxSSLConnections 1000
connTimeout 300
maxKeepAliveReq 1000
smartKeepAlive 0
keepAliveTimeout 5
sndBufSize 0
rcvBufSize 0
maxReqURLLen 8192
maxReqHeaderSize 16380
maxReqBodySize 2047M
maxDynRespHeaderSize 8192
maxDynRespSize 2047M
maxCachedFileSize 4096
totalInMemCacheSize 20M
totalMMAPCacheSize 40M
useSendfile 1
fileETag 28
enableAIORead 1
enableAIOWrite 0
useAIOSendFile 0
maxAIOWrite 128
maxAIOWritePerReq 16
enableSendfileAIO 0
maxSmallFileSize 2K
smallFileMemBlock 4K
largeFileBlockSize 1M
}
Buradaki sndBufSize değeri gönderme tamponu boyutunu belirler. Bu değeri küçük tutmak dolaylı olarak throttling etkisi yaratır ama gerçek throttling için farklı direktifler kullanıyoruz.
Throttle Direktiflerini Eklemek
Ana konfig dosyasına aşağıdaki bloğu ekleyin:
throttle {
staticReqPerSec 0
dynReqPerSec 0
outBandwidth 0
inBandwidth 0
}
Bu bloktaki parametreler şunlardır:
- staticReqPerSec: Saniyede maksimum statik içerik isteği sayısı
- dynReqPerSec: Saniyede maksimum dinamik içerik isteği sayısı
- outBandwidth: Giden bant genişliği limiti (bytes/saniye)
- inBandwidth: Gelen bant genişliği limiti (bytes/saniye)
Virtual Host Bazlı Throttling
Gerçek dünyada genellikle sunucu genelinde değil, site bazında throttling yapmak istersiniz. Özellikle birden fazla müşterinin sitesini barındırıyorsanız bu çok daha mantıklı.
# Virtual host konfig dosyasını düzenle
nano /usr/local/lsws/conf/vhosts/example.com/vhconf.conf
Virtual host konfigurasyon dosyasına throttle bloğunu ekleyin:
throttle {
outBandwidth 512000
inBandwidth 102400
staticReqPerSec 100
dynReqPerSec 20
}
Bu örnekte:
- outBandwidth 512000: Giden trafik maksimum 500 KB/s
- inBandwidth 102400: Gelen trafik maksimum 100 KB/s
- staticReqPerSec 100: Saniyede 100 statik istek
- dynReqPerSec 20: Saniyede 20 dinamik istek
Web Admin Paneli Üzerinden Yapılandırma
Komut satırından çalışmayı sevmiyorsanız veya görsel bir arayüz tercih ediyorsanız, OLS’nin web admin panelini kullanabilirsiniz. Varsayılan olarak https://sunucu-ip:7080 adresinde çalışır.
# Admin paneli şifresini sıfırlamak gerekirse
/usr/local/lsws/admin/misc/admpass.sh
Panel üzerinden throttling için şu yolu izleyin:
- Configuration > Server > Tuning bölümüne gidin
- “Connection” sekmesini açın
- “Out Bandwidth” ve “In Bandwidth” alanlarını doldurun
- Apply butonuna basın, ardından Graceful Restart yapın
Virtual host için ise:
- Virtual Hosts > İlgili site > General sekmesi
- Throttle bölümünü bulun ve değerleri girin
IP Bazlı Throttling ile Access Control
Bazen belirli IP aralıklarına özel limitler uygulamak gerekebilir. Bunu accessControl ve rewrite kurallarıyla kombinleyebilirsiniz, ancak OLS’nin native throttling özelliği IP bazlı ayrım yapmaz. Bu durumda iptables veya tc (traffic control) ile birlikte kullanmak daha etkili sonuç verir.
# tc ile belirli bir interface üzerinden giden trafiği sınırlandır
# Önce mevcut kuralları kontrol et
tc qdisc show dev eth0
# Tüm trafik için 10Mbit/s sınırı koy
tc qdisc add dev eth0 root tbf rate 10mbit burst 32kbit latency 400ms
# Kuralı kaldırmak için
tc qdisc del dev eth0 root
Bu yöntem OLS spesifik değil ama birlikte kullandığınızda çok daha granular bir kontrol sağlar.
Gerçek Dünya Senaryosu 1: Medya Dosyası Sunumu
Diyelim ki bir fotoğraf galerisi veya küçük çaplı video platformu işletiyorsunuz. Kullanıcılar büyük dosyalar indiriyor ve sunucunuzun bant genişliği sınırlı. Bu durumda her bağlantı için makul bir limit koymak mantıklı.
# Video hosting virtual host konfigürasyonu
nano /usr/local/lsws/conf/vhosts/media.example.com/vhconf.conf
virtualHost media.example.com {
vhRoot /var/www/media.example.com
configFile $SERVER_ROOT/conf/vhosts/media.example.com/vhconf.conf
allowSymbolLink 1
enableScript 0
restrained 1
throttle {
outBandwidth 2097152
staticReqPerSec 50
dynReqPerSec 10
}
context /videos/ {
location $VH_ROOT/videos
allowBrowse 0
throttle {
outBandwidth 1048576
}
}
}
Burada /videos/ dizini için ayrıca daha sıkı bir limit uyguladık. 1048576 bytes/saniye yani 1 MB/s, standart bir video stream için yeterli ama aynı anda çok sayıda kullanıcı bağlandığında sunucuyu ezmeyecek bir değer.
Gerçek Dünya Senaryosu 2: Paylaşımlı Hosting Ortamı
Birden fazla müşterinin sitesini barındırdığınız bir ortamda, tek bir müşterinin abartılı trafik üretmesi diğerlerini etkiler. Bunun için her virtual host’a uygun limitler koymak şart.
#!/bin/bash
# Tüm virtual host'lara throttling ekleyen basit script
VHOSTS_DIR="/usr/local/lsws/conf/vhosts"
OUT_BW="1048576" # 1 MB/s
IN_BW="524288" # 512 KB/s
STATIC_RPS="200"
DYN_RPS="50"
for vhost_dir in $VHOSTS_DIR/*/; do
vhost_name=$(basename "$vhost_dir")
conf_file="$vhost_dir/vhconf.conf"
if [ -f "$conf_file" ]; then
# Zaten throttle bloğu var mı kontrol et
if ! grep -q "throttle" "$conf_file"; then
echo "Throttle ekleniyor: $vhost_name"
cat >> "$conf_file" << EOF
throttle {
outBandwidth $OUT_BW
inBandwidth $IN_BW
staticReqPerSec $STATIC_RPS
dynReqPerSec $DYN_RPS
}
EOF
else
echo "Throttle zaten mevcut: $vhost_name"
fi
fi
done
echo "Tamamlandi. OLS'yi graceful restart yapin."
Bu scripti çalıştırdıktan sonra OLS’yi yeniden başlatmayı unutmayın:
# Script'i çalıştırılabilir yap
chmod +x /usr/local/lsws/add_throttle.sh
# Çalıştır
/usr/local/lsws/add_throttle.sh
# OpenLiteSpeed graceful restart
/usr/local/lsws/bin/lswsctrl restart
Context Bazlı Throttling
OLS’nin güzel özelliklerinden biri, belirli URL path’leri için farklı throttling kuralları tanımlayabilmeniz. Örneğin /api/ endpoint’lerinizi korurken statik dosya indirmelerini daha özgür bırakabilirsiniz.
nano /usr/local/lsws/conf/vhosts/mysite.com/vhconf.conf
context /downloads/ {
location /var/www/mysite.com/downloads
allowBrowse 1
throttle {
outBandwidth 524288
staticReqPerSec 30
}
extraHeaders <<<END_extraHeaders
X-Content-Type-Options: nosniff
END_extraHeaders
}
context /api/ {
type proxy
handler lsapi:php
throttle {
dynReqPerSec 100
outBandwidth 0
}
}
context /uploads/ {
location /var/www/mysite.com/uploads
allowBrowse 0
throttle {
inBandwidth 262144
staticReqPerSec 20
}
}
Bu örnekte:
/downloads/klasöründen indirmeler 512 KB/s ile sınırlandırıldı/api/endpoint’leri için bant genişliği sınırsız bırakıldı ama saniyede 100 istek limiti konuldu/uploads/için gelen trafik 256 KB/s ile sınırlandırıldı
Throttling Durumunu İzlemek
Yapılandırmayı yaptıktan sonra gerçekten çalışıp çalışmadığını test etmek önemli. Bunun için birkaç yöntem var.
# OLS gerçek zamanlı istatistikleri
# .rtreport dosyası anlık durum bilgisi verir
cat /tmp/lshttpd/.rtreport
# Daha okunabilir format için
watch -n 2 'cat /tmp/lshttpd/.rtreport | grep -E "BPS|REQ|THROTTLE"'
# curl ile indirme hızını test et
curl -o /dev/null --max-time 30
-w "Hiz: %{speed_download} bytes/saniyenSure: %{time_total}sn"
https://example.com/downloads/test-file.zip
Ayrıca wget ile de test yapabilirsiniz:
# wget ile hız testi
wget --progress=bar --limit-rate=0
-O /dev/null
https://example.com/downloads/test-file.zip 2>&1 |
grep -E "KB/s|MB/s"
OLS Log’larını İncelemek
Throttling ile ilgili sorunları debug ederken log dosyaları hayat kurtarıcı.
# Error log'u izle
tail -f /usr/local/lsws/logs/error.log | grep -i throttle
# Access log'dan yüksek bant genişliği kullanan istekleri bul
# (son alan genellikle response boyutudur)
awk '{print $10, $7}' /usr/local/lsws/logs/access.log |
sort -rn | head -20
# Konfigurasyon syntax kontrolü
/usr/local/lsws/bin/lswsctrl configtest
Yaygın Sorunlar ve Çözümleri
Throttling yapılandırmasında sık karşılaşılan birkaç sorun var:
Throttle değerleri uygulanmıyor gibi görünüyor:
Öncelikle konfigurasyon dosyası syntax hatası olup olmadığını kontrol edin. OLS bazen hatalı konfig varken eski ayarlarla çalışmaya devam eder.
# Konfig syntax testi
/usr/local/lsws/bin/lswsctrl configtest
# OLS process durumunu kontrol et
ps aux | grep lshttpd
# Port dinleme durumu
ss -tlnp | grep lshttpd
Graceful restart sonrası değişiklikler aktif olmadı:
Graceful restart yerine tam restart deneyin:
# Graceful restart
/usr/local/lsws/bin/lswsctrl restart
# Çalışmıyorsa tam stop/start
/usr/local/lsws/bin/lswsctrl stop
sleep 3
/usr/local/lsws/bin/lswsctrl start
Cache’lenmiş içerik throttling’i bypass ediyor:
OLS’nin LiteSpeed Cache eklentisi aktifse, cache’den dönen içerik bazen throttle kurallarını atlar. Cache konfigürasyonunuzu kontrol edin.
- Cache’i geçici olarak devre dışı bırakıp testi tekrarlayın
X-LiteSpeed-Cacheresponse header’ını kontrol edin, “hit” yazıyorsa cache’den geliyor demektir- Virtual host bazlı throttling yerine context bazlı throttling deneyin
Güvenlik ile Birleştirmek
Throttling sadece bant genişliği yönetimi için değil, basit bir DDoS koruması olarak da işe yarar. Özellikle dynReqPerSec değerini düşük tutmak, brute force saldırıları ve bot trafiğini önemli ölçüde kısar.
# Fail2ban ile OLS throttle log'larını kombinlemek
# /etc/fail2ban/filter.d/ols-throttle.conf
cat > /etc/fail2ban/filter.d/ols-throttle.conf << 'EOF'
[Definition]
failregex = [INFO] .* throttled, client: <HOST>
[WARN] .* connection throttled .* from <HOST>
ignoreregex =
EOF
# /etc/fail2ban/jail.local'a ekle
cat >> /etc/fail2ban/jail.local << 'EOF'
[ols-throttle]
enabled = true
port = http,https
logpath = /usr/local/lsws/logs/error.log
filter = ols-throttle
maxretry = 10
findtime = 60
bantime = 3600
EOF
systemctl restart fail2ban
Performans Etkisini Değerlendirmek
Throttling aktifken sunucu kaynak kullanımının nasıl değiştiğini izlemek önemli. Çok agresif limitler koyarsanız meşru kullanıcıları da olumsuz etkilersiniz.
# Basit yük testi - ab (Apache Bench) ile
ab -n 1000 -c 50 -k https://example.com/downloads/test.pdf
# Sonuçlarda "Transfer rate" değerine bakın
# Bu değer throttle limitinizin altında olmalı
# Daha gelişmiş test için wrk
wrk -t12 -c400 -d30s https://example.com/
Throttle değerlerinizi belirlerken şu faktörleri göz önünde bulundurun:
- Sunucunuzun toplam bant genişliği
- Ortalama eş zamanlı kullanıcı sayısı
- İçerik tipine göre beklenen dosya boyutları
- SLA veya hizmet seviyesi taahhütleriniz
- Peak saatlerdeki trafik pattern’ı
İyi bir başlangıç noktası olarak: toplam bant genişliğinizi maksimum eş zamanlı bağlantı sayısına bölün ve bu değerin %60-70’ini tek bağlantı limiti olarak kullanın. Bu size hem makul bir kullanıcı deneyimi hem de sistem güvencesi sağlar.
Sonuç
OpenLiteSpeed’de bandwidth throttling, basit görünse de doğru yapılandırıldığında sunucu kaynaklarını korumanın ve adil kullanım politikası uygulamanın en etkili yollarından biri. Sunucu geneli, virtual host bazlı ve context bazlı olmak üzere üç katmanlı bir yaklaşım benimsemek, hem esneklik hem de güvenlik açısından en sağlıklı seçenek.
Yapılandırmayı yaptıktan sonra mutlaka test edin, log’ları izleyin ve kullanıcı geri bildirimlerini takip edin. Çok kısıtlayıcı limitler meşru kullanıcıları rahatsız eder, çok gevşek limitler ise throttling’in amacını ortadan kaldırır. Doğru denge, sunucunuzun kapasitesini ve kullanım pattern’larını iyi analiz etmekten geçiyor.
Son olarak, OLS’yi cPanel/WHM veya CyberPanel gibi kontrol panelleriyle birlikte kullanıyorsanız, panel üzerinden yapılan değişikliklerin konfig dosyalarının üzerine yazabileceğini unutmayın. Bu durumda throttling ayarlarınızı panel arayüzünden yönetmek çok daha güvenli olur.