cPanel yıllıkta ücretsiz taşıma + SSLHemen İncele
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ü9 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. Bu rehber, Ubuntu 22.04 VDS üzerinde Nginx kurulumunu kısaca geçip WordPress'e özgü server block yapılandırmasına, PHP-FPM ayarlarına, FastCGI önbelleğine ve güvenlik sertleştirmesine odaklanıyor.

Kapsam notu: Bu yazı Nginx + WordPress özelinde kurulum ve FastCGI cache. Büyükweb paylaşımlı hosting standart olarak LiteSpeed Web Server ile çalışır; LiteSpeed Cache (LSCache) native WP entegrasyonu sağlar. VDS 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)

2. Kurulum ve Dizin Yapısı

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 nginx -t                 # syntax kontrolü, "syntax is ok" beklenir

Document root varsayılan olarak /var/www/html/'dir; WordPress sitesi için ayrı dizin açacağız. Site başına vhost dosyaları şu dizinlerde yönetilir:

/etc/nginx/sites-available/   → Her site için ayrı config
/etc/nginx/sites-enabled/     → Aktif siteler (symlink)
/var/log/nginx/               → access.log, error.log

WordPress sitesi için vhost eklerken izlenecek akış (bir sonraki bölümde uygulanacak):

sudo nano /etc/nginx/sites-available/example.com
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

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.

3. 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 — 4. 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

4. PHP-FPM Entegrasyonu ve WordPress İçin Ayarlar

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.

WordPress için php.ini değerleri (/etc/php/8.3/fpm/php.ini):

memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
max_input_vars = 3000

upload_max_filesize ve post_max_size değerleri, server block'taki client_max_body_size (bölüm 8) ile eşleşmelidir; aksi halde büyük medya yüklemelerinde hata alınır. memory_limit = 256M çoğu WordPress teması ve eklenti kombinasyonu için önerilen minimum değerdir; ağır sayfa oluşturucular veya çok eklentili kurulumlarda 512M gerekebilir.

Değişiklik sonrası:

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

5. SSL/HTTPS — Let's Encrypt (Certbot)

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.com -d www.example.com
sudo certbot renew --dry-run

Certbot, server block'a listen 443 ssl http2, sertifika yolları ve HTTP→HTTPS yönlendirmesini otomatik ekler. HSTS için manuel eklenecek satır:

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

WordPress tarafında Ayarlar → Genel altındaki "Site Adresi (URL)" değerinin https:// ile başladığından emin olun; aksi halde karma içerik (mixed content) uyarıları ve yönlendirme döngüleri oluşabilir.

6. 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.

7. 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.

8. Statik Dosya, Gzip ve Medya Yükleme Ayarları

/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;

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

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

client_max_body_size 64M WordPress medya kütüphanesinde büyük görsel veya video yüklemelerinde 413 Request Entity Too Large hatasını önler; bu değer php.ini'deki upload_max_filesize ve post_max_size (bölüm 4) ile eşleşmelidir.

Statik varlıklar (CSS, JS, görsel, font) için bölüm 3'teki server block'ta tanımlı expires 1y ve Cache-Control: public, immutable header'ları tarayıcı önbelleğini devreye sokar; tekrar ziyaretlerde bu dosyalar sunucudan hiç istenmez.

9. Güvenlik Header'ları ve WordPress Sertleştirme

Server block içine genel güvenlik header'ları:

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.

WordPress'e özgü sertleştirme kuralları:

# .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;   # sabit IP'niz
    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.

10. Büyükweb VDS'te Nginx Kurulumu

Büyükweb VMware vSphere tabanlı VDS paketleri root erişimi sunar; Ubuntu 22.04 veya AlmaLinux tercihiyle yukarıdaki adımlar bire bir uygulanabilir.

Web Konsol, sunucuya SSH bağlantısı kurulamadığı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.

11. Sık Sorulan Sorular

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.

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/LiteSpeed .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.

PHP-FPM ayrıca ayarlanması gerekiyor mu?

Evet. pm.max_children, pm.max_requests ve bölüm 4'te listelenen php.ini değerleri (memory_limit, upload_max_filesize, max_execution_time) WordPress gereksinimlerine göre ayarlanmalıdır. memory_limit = 256M WP için önerilen minimum değerdir.

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.

Büyükweb 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ı satış öncesi destek numaramıza ulaşabilir 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ş

WhatsApp0850 302 60 70