Buyukweb
Nginx Kurulum, Yapılandırma ve WordPress Optimizasyon Rehberi

Nginx Kurulum, Yapılandırma ve WordPress Optimizasyon Rehberi

Nginx web sunucusunu nasıl kurar ve yapılandırırsınız? Nginx site bloğu, SSL yapılandırması, WordPress için Nginx ayarları ve performans optimizasyonu rehberi.

Büyükweb Editör EkibiHosting, Sunucu ve Sistem Yönetimi Editörü11 dakika okuma

Nginx Kurulum, Yapılandırma ve WordPress Optimizasyon Rehberi

Nginx (okunuşu: engine-x), event-driven mimarisiyle yüksek eş zamanlı bağlantılarda Apache prefork modeline göre belirgin biçimde daha az bellek tüketir. Statik dosya servisi, ters proxy ve yük dengeleme rolleri için endüstri standardı konumunda. Bu rehberde Ubuntu 22.04 VDS üzerinde sıfırdan Nginx kurulumunu, WordPress'e özgü server block yapılandırmasını, PHP-FPM entegrasyonunu, FastCGI önbelleğini ve güvenlik sertleştirmeyi adım adım işliyoruz.

Kapsam notu: Bu yazı Nginx + WordPress özelinde kurulum ve FastCGI cache. Buyukweb paylaşımlı hosting standart olarak LiteSpeed Web Server ile çalışır; LiteSpeed Cache (LSCache) native WP entegrasyonu sağlar. VDS/KVM paketlerinde root erişimi ile Nginx tercih edilebilir.

1. Nginx + WordPress Neden Popüler?

Apache'nin prefork modeli, her bağlantı için ayrı bir süreç veya iş parçacığı oluşturur. Düşük trafikte sorun yok; ancak eş zamanlı bağlantı sayısı arttığında RAM ve CPU tüketimi sert yükselir.

Nginx, tek bir worker process içinde yüzlerce-binlerce bağlantıyı event loop ile yönetir. Pratik sonucu: aynı donanımda Nginx, Apache'nin iki-üç katı eş zamanlı isteği karşılayabilir.

WordPress için Nginx'i cazip kılan ek özellikler:

  • Statik dosya (CSS, JS, resim, font) servisi doğrudan disk üzerinden, PHP çağrısı olmadan
  • fastcgi_pass ile PHP-FPM Unix socket entegrasyonu — PHP çalıştırma en kısa yoldan
  • fastcgi_cache modülü ile sayfa önbelleği, çok sayıda eklentiye gerek kalmadan
  • Ters proxy + upstream blokları ile yük dengeleme (çok sunucu senaryosu)

LiteSpeed nerede devreye giriyor? Buyukweb paylaşımlı hosting paketlerinde standart web sunucusu LiteSpeed'dir. LiteSpeed, Apache config syntax'ıyla uyumludur (.htaccess okur) ve LSCache eklentisiyle sıfır yapılandırmayla WP sayfa önbelleği sağlar. VDS kullanıcıları root erişimleri sayesinde Nginx, LiteSpeed veya OpenLiteSpeed arasında tercih yapabilir.

2. Nginx Kurulumu — Ubuntu 22.04

sudo apt update
sudo apt install nginx -y
sudo systemctl enable --now nginx
sudo ufw allow 'Nginx Full'   # 80 ve 443 portlarını açar
sudo systemctl status nginx   # active (running) görünmeli

Sürüm ve derleme bilgisi:

nginx -v          # nginx/1.xx.x
nginx -V          # derleme bayrakları ve modüller

Document root varsayılan olarak /var/www/html/'dir; her site için ayrı dizin açacağız.

3. Nginx Konfigürasyon Dosya Yapısı

/etc/nginx/
├── nginx.conf              → Ana yapılandırma (global + http bloğu)
├── conf.d/                 → Snippet'lar; tüm .conf dosyaları otomatik dahil
├── sites-available/        → Her site için ayrı vhost dosyası (Ubuntu)
└── sites-enabled/          → Aktif vhost'lar (sites-available → symlink)

/var/log/nginx/
├── access.log              → Erişim kayıtları
└── error.log               → Hata kayıtları

Konfigürasyon iş akışı:

# Yeni site dosyası oluştur
sudo nano /etc/nginx/sites-available/example.com

# Aktif et (symlink)
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

# Syntax kontrolü
sudo nginx -t

# Graceful reload — aktif bağlantıları kesmeden
sudo systemctl reload nginx
# veya
sudo nginx -s reload

nginx -t çıktısı syntax is ok ve test is successful verene kadar reload yapmayın. Hatalı config, reload sonrası Nginx'i durdurmaz; ancak restart sırasında başlatmayı engeller.

4. WordPress Server Block (Virtual Host)

/etc/nginx/sites-available/example.com içeriği:

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;

    root /var/www/example.com;
    index index.php index.html;

    # WordPress permalink rewrite — zorunlu
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # PHP-FPM — 5. bölümde detaylı
    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # Statik dosya — PHP'ye gönderme
    location ~* \.(jpg|jpeg|png|gif|webp|svg|ico|css|js|woff2|woff|ttf)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
        access_log off;
        try_files $uri =404;
    }

    access_log /var/log/nginx/example.com.access.log;
    error_log  /var/log/nginx/example.com.error.log;
}

try_files $uri $uri/ /index.php?$args; satırı WordPress kalıcı bağlantı (pretty permalink) çalışması için zorunludur. Bu direktif olmadan /kategori/yazi-basligi/ gibi URL'ler 404 döner.

Dizin oluştur ve izinleri ayarla:

sudo mkdir -p /var/www/example.com
sudo chown -R www-data:www-data /var/www/example.com
sudo chmod -R 755 /var/www/example.com

5. PHP-FPM Entegrasyonu

WordPress PHP gerektirdiğinden Nginx tek başına yetmez; PHP-FPM (FastCGI Process Manager) kurulması gerekir.

sudo apt install php8.3-fpm php8.3-mysql php8.3-xml php8.3-curl \
     php8.3-mbstring php8.3-zip php8.3-gd php8.3-intl -y
sudo systemctl enable --now php8.3-fpm

PHP-FPM socket yolu /run/php/php8.3-fpm.sock; server block'taki fastcgi_pass bunu referans alır.

PHP-FPM pool ayarı /etc/php/8.3/fpm/pool.d/www.conf:

user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
listen.owner = www-data
listen.group = www-data

pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10
pm.max_requests = 500

pm.max_children değeri sunucu RAM'ine göre belirlenir. Her PHP-FPM worker ortalama 30-50 MB RAM tüketir; 4 GB RAM'li VDS için pm.max_children = 40-60 başlangıç değeri uygundur.

Değişiklik sonrası:

sudo systemctl reload php8.3-fpm
sudo nginx -t && sudo systemctl reload nginx

6. SSL/HTTPS — Certbot ile Let's Encrypt

sudo apt install certbot python3-certbot-nginx -y

# Sertifika al ve Nginx config'i otomatik güncelle
sudo certbot --nginx -d example.com -d www.example.com

# Otomatik yenileme testi
sudo certbot renew --dry-run

Certbot, sites-available/example.com dosyasına listen 443 ssl, ssl_certificate, ssl_certificate_key ve HTTP→HTTPS yönlendirmesini otomatik ekler. Elle yapılacak eklentiler:

server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    # ... diğer direktifler
}

# HTTP → HTTPS yönlendirme
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

HSTS (Strict-Transport-Security) etkinleştirildiğinde tarayıcılar sonraki isteklerde HTTP'yi hiç denemez; MITM saldırısına karşı ekstra katman sağlar.

7. Nginx FastCGI Cache — WordPress Sayfa Önbelleği

FastCGI cache, PHP-FPM'in ürettiği HTML çıktısını diske yazar; sonraki isteklerde PHP çalıştırmadan bu kaydı doğrudan sunar. WordPress'teki LSCache'in Nginx karşılığıdır.

/etc/nginx/nginx.conf http bloğuna ekle:

http {
    # FastCGI önbellek deposu
    fastcgi_cache_path /var/cache/nginx
        levels=1:2
        keys_zone=WORDPRESS:100m
        inactive=60m
        max_size=1g;

    fastcgi_cache_key "$scheme$request_method$host$request_uri";
    fastcgi_cache_use_stale error timeout updating invalid_header http_500;
    fastcgi_cache_lock on;

    # ...
}

WordPress server block içinde cache yönetimi:

# Oturum açmış kullanıcılar, sepet, yönetici: cache bypass
set $skip_cache 0;

if ($request_method = POST)           { set $skip_cache 1; }
if ($query_string != "")              { set $skip_cache 1; }
if ($request_uri ~* "/wp-admin/|/wp-login\.php|/cart/|/checkout/|/my-account/") {
    set $skip_cache 1;
}
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|woocommerce_cart_hash") {
    set $skip_cache 1;
}

location ~ \.php$ {
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

    fastcgi_cache WORDPRESS;
    fastcgi_cache_valid 200 60m;
    fastcgi_cache_bypass $skip_cache;
    fastcgi_no_cache $skip_cache;

    # Cache durumunu header'da göster (debug)
    add_header X-FastCGI-Cache $upstream_cache_status;
}

X-FastCGI-Cache header'ı HIT, MISS veya BYPASS döner. curl -I https://example.com ile kontrol edebilirsiniz.

8. Cache Invalidation — İçerik Güncellendiğinde Önbellek Temizleme

FastCGI cache'in en büyük zorluğu: yazı yayınlama veya güncelleme sonrası eski HTML disk üzerinde kalır. İki çözüm var:

Nginx Helper eklentisi (önerilen): WordPress için özel geliştirilmiş Nginx Helper eklentisi, yazı kaydedildiğinde, yorum eklendiğinde veya tema değiştirildiğinde ilgili önbellek dosyalarını siler. Kurulum:

  1. WordPress Yönetici → Eklentiler → Nginx Helper'ı kur
  2. Ayarlar → Nginx Helper → Cache Purge yöntemi: "Delete local server cache files" seç
  3. Nginx cache path: /var/cache/nginx gir

Cron ile toplu temizleme: Önbellekten çıkma (inactive) süresi dolduğunda Nginx otomatik siler. inactive=60m ayarı 60 dakika içinde erişilmeyen dosyaları kaldırır. Toplu temizleme için:

sudo rm -rf /var/cache/nginx/*
sudo systemctl reload nginx

WooCommerce aktif sitelerde sepet ve ödeme sayfaları (/cart/, /checkout/) cache'lenmemeli — yukarıdaki $skip_cache bloğu bunu zaten sağlar.

9. Statik Dosya Optimizasyonu: Gzip, Brotli, Client Max Body

/etc/nginx/nginx.conf http bloğu:

http {
    # Gzip sıkıştırma
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_min_length 1000;
    gzip_types
        text/plain text/css text/xml text/javascript
        application/json application/javascript application/xml
        application/rss+xml image/svg+xml;

    # Önceden sıkıştırılmış .gz dosyaları sun (gzip_static)
    gzip_static on;

    # WordPress medya yükleme sınırı
    client_max_body_size 64M;

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
}

Brotli: Ubuntu 22.04 APT deposundaki nginx paketi Brotli ile gelmiyor; libnginx-mod-brotli veya kaynak derleme gerektirir. Kurulu ise:

brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css application/json application/javascript image/svg+xml;

client_max_body_size 64M WordPress medya yüklemelerinde 413 Request Entity Too Large hatasını önler; php.ini'deki upload_max_filesize ve post_max_size ile eşleşmeli.

10. Güvenlik Header'ları

Server block içine ekle:

add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;

Content-Security-Policy (CSP) WordPress'te dikkatli uygulanmalı; Google Tag Manager, reCAPTCHA, font CDN gibi üçüncü taraf kaynaklar varsa kırılabilir. Test ortamında Content-Security-Policy-Report-Only header'ı ile başlayın, ihlalleri toplayın, ardından üretime alın.

HSTS: SSL bölümünde gösterilen Strict-Transport-Security header'ı buraya da eklenebilir; en iyi pratik always parametresiyle sunmaktır.

11. WordPress Sertleştirme — Nginx Tarafı

# .htaccess ve gizli dosyalar
location ~ /\.ht {
    deny all;
}

# wp-config.php ve readme
location ~ /(wp-config\.php|readme\.html|license\.txt) {
    deny all;
}

# xmlrpc.php — brute force saldırıları için kullanılan hedef
location = /xmlrpc.php {
    deny all;
    access_log off;
    log_not_found off;
}

# wp-login.php IP kısıtlama (kendi IP'nizi ekleyin)
location = /wp-login.php {
    allow 1.2.3.4;   # ofis IP'si
    allow 5.6.7.8;   # VPN IP'si
    deny all;
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

# wp-admin dizini IP kısıtlama
location /wp-admin/ {
    allow 1.2.3.4;
    allow 5.6.7.8;
    deny all;
    try_files $uri $uri/ /index.php?$args;
}

# PHP dosyaları uploads dizininde engelle (shell upload koruması)
location ~* /wp-content/uploads/.*\.php$ {
    deny all;
}

xmlrpc.php tamamen devre dışı bırakılabilir; REST API çağrılarını etkileyen bir eklenti yoksa bu en güvenli yol. Bazı eklentiler xmlrpc'ye ihtiyaç duyar; bu durumda belirli IP'ye allow ekleyin.

12. HTTP/2, HTTP/3 ve Gzip Performans

HTTP/2 listen 443 ssl http2; ile etkinleşir. Sunucu push kaldırıldı (Chrome 106'dan itibaren desteklenmiyor); ancak multiplexing ile bağlantı başına birden fazla istek aynı anda işlenir — CSS/JS dosyaları paralel iner.

HTTP/3 (QUIC): Ubuntu 22.04 apt deposundaki Nginx HTTP/3 desteklemez; nginx-quic paketi veya Mainline Nginx (PPA) gerektirir. Kurulu ise:

listen 443 ssl http2;
listen 443 quic reuseport;
add_header Alt-Svc 'h3=":443"; ma=86400';

Gzip static: gzip_static on ile style.css.gz gibi önceden sıkıştırılmış dosyalar her istekte yeniden sıkıştırılmadan sunulur. WP Rocket veya Minify eklentisi .gz dosyaları üretiyorsa bu direktif CPU tasarrufu sağlar.

13. Nginx vs LiteSpeed — WordPress Perspektifi

Kriter Nginx + FastCGI Cache LiteSpeed + LSCache
Cache entegrasyonu Manuel config + Nginx Helper eklentisi LSCache eklentisi — sıfır config
ESI (Edge Side Includes) Hayır Evet (login widget önbelleği)
Apache .htaccess uyumu Hayır — ayrı Nginx syntax Evet — .htaccess okur
WooCommerce sepet cache Manuel $skip_cache bloğu Otomatik (LSCache bilir)
HTTP/3 (QUIC) Mainline Nginx ile LiteSpeed standart
Brotli Ek modül gerekir Standart
cPanel hosting'de kullanıcı config Mümkün değil (sunucu katmanı) LSCache eklentisi yeterli
VDS'te tam kontrol Tam Tam (OpenLiteSpeed ticari değil)

Paylaşımlı hosting kullanıcısı Nginx konfigürasyonuna erişemez; sunucu yönetim katmanıdır. Buyukweb paylaşımlı hosting'de LiteSpeed + LSCache standart gelir; WP kullanıcısının yapması gereken tek şey LSCache eklentisini kurmak.

VDS kullananlar her iki seçeneği de uygulayabilir. Sıfırdan başlayanlar için Nginx daha geniş dokümantasyon ve topluluk desteği sunar; LiteSpeed, Apache deneyimli kullanıcılar için geçiş sürtünmesi düşüktür.

14. Buyukweb VDS'te Nginx Kurulumu

Buyukweb KVM tabanlı VDS paketleri root erişimi sunar; Ubuntu 22.04 veya AlmaLinux tercihiyle kurulum yapılabilir. Nginx kurulum adımları bu yazıda gösterilen Ubuntu akışıyla bire bir uyuşur.

KVM konsol, sunucuya SSH bağlantısı olmadığında (yanlış güvenlik duvarı kuralı vb.) erişim sağlar; Nginx yapılandırma hatalarından sonra sunucuyu kurtarmak için kritik.

Kurulum kontrolü:

systemctl status nginx        # active (running)
systemctl status php8.3-fpm  # active (running)
nginx -t                      # syntax is ok
curl -I https://example.com   # HTTP/2 200 ve X-FastCGI-Cache: HIT

Destek için 0850 302 60 70 numaralı hattı arayabilirsiniz.

15. Sık Sorulan Sorular

Nginx mi, LiteSpeed mi seçmeliyim?

VDS'te Nginx geniş topluluk ve bol dokümantasyonla güvenli seçim; FastCGI cache WP için yeterlidir. LiteSpeed, cPanel uyumluluğu ve LSCache native entegrasyonu ile özellikle WooCommerce sitelerinde öne çıkar. Buyukweb paylaşımlı hosting zaten LiteSpeed ile çalışır.

FastCGI cache nasıl test edilir?

curl -I https://example.com ile X-FastCGI-Cache: HIT görünmeli. İlk istekte MISS, ikincide HIT olur. BYPASS ise $skip_cache koşulunun tetiklendiğini gösterir (oturum açık kullanıcı, sepet cookie'si vb.).

Apache .htaccess kurallarımı Nginx'e nasıl taşırım?

.htaccess Nginx'te desteklenmez; tüm kuralları server block içine if direktifleri veya location blokları ile yeniden yazmanız gerekir. Çevrimiçi dönüşüm araçları otomatik çeviri sunar, ancak çıktıyı mutlaka test edin.

try_files $uri $uri/ /index.php?$args; satırının location / bloğunda bulunduğundan emin olun. $args olmadan query string parametreleri kaybolur; bu da sayfalama ve filtreleme özelliklerini bozar.

PHP-FPM ayrıca ayarlanması gerekiyor mu?

Evet. pm.max_children, pm.max_requests ve php.ini değerleri (upload_max_filesize, memory_limit, max_execution_time) WordPress gereksinimleri için ayarlanmalı. Özellikle memory_limit = 256M WP için minimum önerilir.

Cache miss neden sık oluyor?

En yaygın nedenler: WooCommerce sepet cookie'si tüm sayfalarda $skip_cache 1 tetikliyor, inactive süresi çok kısa, önbellek diski dolmuş. find /var/cache/nginx -type f | wc -l ile dosya sayısını, du -sh /var/cache/nginx ile disk kullanımını kontrol edin.

Nginx Helper eklentisi şart mı?

Zorunlu değil; ancak içerik güncellendiğinde önbelleğin anında temizlenmesini istiyorsanız gerekli. Olmadan eski HTML inactive süresi dolana kadar sunulur. Yüksek güncellik gerektiren haberler, ürün sayfaları için Nginx Helper kurun. Blog gibi seyrek değişen siteler için inactive=60m yeterlidir.


Nginx, VDS üzerinde WordPress için güçlü ve esnek bir web sunucusudur. Doğru konfigürasyon sırası: kurulum → server block → PHP-FPM → SSL → FastCGI cache → güvenlik header'ları → sertleştirme. Her değişiklikten önce nginx -t çalıştırın; her reload öncesi syntax hatası olmadığından emin olun.

Buyukweb KVM VDS paketleri ve paylaşımlı hosting seçenekleri için 0850 302 60 70 numaralı hattı arayabilir ya da iletişim sayfamıza yazabilirsiniz.


İlgili Büyükweb Hizmetleri

Nginx veya LiteSpeed kurulumu için root erişimli VDS, ya da hazır LiteSpeed hosting arıyorsanız:

Sorularınız için 0850 302 60 70 numaralı destek hattımıza veya iletişim sayfamıza yazabilirsiniz.

Sunucu Yönetimi İlgili Hizmetlerimiz

Bu yazıda anlatılan teknik konuyu profesyonel altyapıyla deneyimleyin

Etiketler:

#wordpress#nginx#kurulum rehberi#sunucu#server yönetimi#sistem yönetimi

Bu yazıyı paylaş