Takip et

Nginx ile Tek ve Çoklu WordPress Site Ayarlarının Yapılandırılması

Nginx ile Tek ve Çoklu WordPress Site Ayarlarının Yapılandırılması WordPress, dünya genelinde milyonlarca web sitesinin temelini oluşturan,

Nginx ile Tek ve Çoklu WordPress Site Ayarlarının Yapılandırılması

WordPress, dünya genelinde milyonlarca web sitesinin temelini oluşturan, kullanımı kolay ve güçlü bir içerik yönetim sistemidir (CMS). Geleneksel olarak Apache web sunucusu ile birlikte anılsa da, Nginx’in son yıllardaki yükselişi, özellikle yüksek performans ve ölçeklenebilirlik gerektiren projelerde WordPress için tercih edilen bir alternatif haline gelmesini sağlamıştır. Nginx, düşük kaynak tüketimi, eşzamanlı bağlantıları etkin bir şekilde yönetebilme yeteneği ve statik içerik sunumundaki üstün performansı ile dikkat çeker. Bu makalede, Nginx’in temellerini, tek bir WordPress sitesinin nasıl yapılandırılacağını, ardından WordPress Multisite kurulumunun hem subdomain hem de subdirectory modları için Nginx ile nasıl entegre edileceğini detaylı bir şekilde inceleyeceğiz. Ayrıca, performans ve güvenlik için ek Nginx ayarları ile sık karşılaşılan sorunlara çözümler sunarak, kapsamlı bir rehber sunmayı hedefliyoruz.

Nginx Temelleri ve WordPress İçin Avantajları

Nginx (engine-x olarak telaffuz edilir), Igor Sysoev tarafından geliştirilmiş, yüksek performanslı, hafif bir HTTP ve ters proxy sunucusudur. Apache gibi süreç tabanlı (process-based) bir mimariye sahip olmak yerine, olay tabanlı (event-driven), eşzamansız (asynchronous) bir mimari kullanır. Bu mimari, Nginx’in aynı anda binlerce bağlantıyı çok daha az sistem kaynağı tüketerek yönetebilmesini sağlar.

Nginx Nedir?

Nginx, modern web sunucularının karşılaştığı “C10k problemi” (aynı anda 10.000 bağlantıyı yönetme) sorununa bir çözüm olarak ortaya çıkmıştır. Bir web sunucusu olmasının yanı sıra, ters proxy sunucusu, yük dengeleyici (load balancer), HTTP önbelleği (HTTP cache) ve e-posta proxy sunucusu olarak da işlev görebilir. Özellikle statik içerik sunumunda ve PHP gibi dinamik içerikleri FastCGI Process Manager (PHP-FPM) aracılığıyla işleme konusunda üstün bir performans sergiler.

Nginx’in WordPress İçin Faydaları

WordPress, dinamik bir uygulama olduğu için genellikle PHP ve veritabanı (MySQL/MariaDB) ile birlikte çalışır. Nginx’in bu kombinasyonda sunduğu faydalar şunlardır:

* Yüksek Performans ve Düşük Kaynak Tüketimi: Nginx, Apache’ye kıyasla daha az bellek ve CPU kullanarak daha fazla eşzamanlı bağlantıyı işleyebilir. Bu, özellikle yüksek trafikli WordPress siteleri için kritik bir avantajdır.
* Statik Dosya Sunumu Yeteneği: WordPress siteleri, resimler, CSS ve JavaScript dosyaları gibi çok sayıda statik içeriğe sahiptir. Nginx, bu statik dosyaları doğrudan ve son derece hızlı bir şekilde sunarak PHP-FPM’ye olan yükü azaltır ve genel sayfa yükleme sürelerini iyileştirir.
* PHP-FPM ile Hızlı İletişim: Nginx, PHP kodunu doğrudan yorumlamaz. Bunun yerine, PHP-FPM ile FastCGI protokolü üzerinden iletişim kurar. Bu ayrım, her birinin kendi uzmanlık alanına odaklanmasını sağlar: Nginx HTTP isteklerini yönetirken, PHP-FPM PHP kodunu işler. Bu mimari, daha kararlı ve performanslı bir ortam sunar.
* Ölçeklenebilirlik: Nginx’in hafif yapısı ve ters proxy yetenekleri, WordPress sitelerini yatayda ölçeklemeyi kolaylaştırır. Birden fazla uygulama sunucusu arasında trafiği dengeleyebilir veya önbellekleme katmanları ekleyerek performansı artırabilir.

Tek Bir WordPress Sitesini Nginx ile Yapılandırma

Tek bir WordPress sitesini Nginx üzerinde çalıştırmak, temel düzeyde Nginx yapılandırması gerektirir. Bu bölümde, gerekli ön koşullardan başlayarak adım adım yapılandırma sürecini inceleyeceğiz.

Ön Gereksinimler

Başlamadan önce aşağıdaki bileşenlerin sunucunuzda kurulu ve çalışır durumda olması gerekmektedir:

* Linux Sunucu: Ubuntu, CentOS, Debian gibi bir Linux dağıtımı.
* Nginx: Web sunucusu olarak Nginx.
* PHP-FPM: PHP kodunu işlemek için PHP FastCGI Process Manager.
* MySQL/MariaDB: WordPress verilerini depolamak için bir veritabanı sunucusu.
* WordPress Dosyaları: WordPress’in en son sürümü.
* Alan Adı (Domain): Sitenize erişmek için bir alan adı ve DNS ayarlarının sunucunuzun IP adresini göstermesi.

Nginx Kurulumu

Çoğu Linux dağıtımında Nginx, paket yöneticisi aracılığıyla kolayca kurulabilir.
Ubuntu/Debian için:

sudo apt update
sudo apt install nginx

CentOS/RHEL için:

sudo yum install epel-release
sudo yum install nginx

Kurulumdan sonra Nginx servisini başlatın ve sistem başlangıcında otomatik çalışacak şekilde etkinleştirin:

sudo systemctl start nginx
sudo systemctl enable nginx

PHP-FPM Kurulumu ve Yapılandırması

WordPress, PHP ile yazıldığı için PHP-FPM’ye ihtiyacımız var. PHP sürümünüzü (örneğin PHP 8.x) seçerek kurun.
Ubuntu/Debian için (PHP 8.1 örneği):

sudo apt install php8.1-fpm php8.1-mysql php8.1-cli php8.1-curl php8.1-gd php8.1-mbstring php8.1-xml php8.1-zip

CentOS/RHEL için (PHP 8.1 örneği, Remi deposu ile):

sudo yum install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
sudo yum module enable php:remi-8.1
sudo yum install php-fpm php-mysqlnd php-cli php-curl php-gd php-mbstring php-xml php-zip

Kurulumdan sonra PHP-FPM servisini başlatın ve etkinleştirin:

sudo systemctl start php8.1-fpm
sudo systemctl enable php8.1-fpm

PHP-FPM yapılandırmasında, php.ini dosyasında bazı temel ayarları kontrol etmek faydalıdır. Özellikle upload_max_filesize ve post_max_size gibi değerleri sitenizin ihtiyaçlarına göre ayarlayabilirsiniz. PHP-FPM’nin www.conf dosyasında (genellikle /etc/php/8.1/fpm/pool.d/www.conf veya /etc/php-fpm.d/www.conf), listen yönergesinin unix:/run/php/php8.1-fpm.sock (Ubuntu) veya 127.0.0.1:9000 (CentOS/varsayılan) olarak ayarlandığından emin olun. Nginx yapılandırmasında bu değeri kullanacağız.

MySQL/MariaDB Kurulumu

WordPress veritabanı için MySQL veya MariaDB kurun.
Ubuntu/Debian için:

sudo apt install mysql-server
sudo mysql_secure_installation # Güvenlik ayarları için

CentOS/RHEL için:

sudo yum install mariadb-server
sudo systemctl start mariadb
sudo systemctl enable mariadb
sudo mysql_secure_installation

Veritabanı sunucusunu kurduktan sonra, WordPress için bir veritabanı ve kullanıcı oluşturun:

sudo mysql -u root -p
CREATE DATABASE wordpress_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wordpress_user'@'localhost' IDENTIFIED BY 'guclu_sifre';
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wordpress_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Kendi veritabanı adınızı, kullanıcı adınızı ve şifrenizi kullanmayı unutmayın.

WordPress Dosyalarını Sunucuya Yükleme

WordPress’in en son sürümünü wordpress.org adresinden indirin ve sunucunuzun web kök dizinine (örneğin /var/www/html/yourdomain.com) çıkarın.

cd /tmp
wget https://wordpress.org/latest.tar.gz
tar -xvzf latest.tar.gz
sudo mv wordpress /var/www/html/yourdomain.com # Kendi alan adınızla değiştirin
sudo chown -R www-data:www-data /var/www/html/yourdomain.com # Ubuntu/Debian için

sudo chown -R nginx:nginx /var/www/html/yourdomain.com # CentOS/RHEL için

sudo chmod -R 755 /var/www/html/yourdomain.com

Ardından, WordPress’in kurulum sihirbazını tamamlamak için wp-config-sample.php dosyasını wp-config.php olarak kopyalayın ve veritabanı bilgilerinizi girin.

cd /var/www/html/yourdomain.com
sudo cp wp-config-sample.php wp-config.php
sudo nano wp-config.php

DB_NAME, DB_USER, DB_PASSWORD değerlerini oluşturduğunuz veritabanı bilgileriyle güncelleyin.

Nginx Sanal Host (Server Block) Yapılandırması

Nginx, her site için ayrı bir yapılandırma dosyası kullanarak sanal hostları (server blocks) yönetir. Bu dosyalar genellikle /etc/nginx/sites-available/ dizininde bulunur ve etkinleştirmek için /etc/nginx/sites-enabled/ dizinine sembolik bir bağlantı oluşturulur.

Yeni bir yapılandırma dosyası oluşturun (örneğin yourdomain.com.conf):

sudo nano /etc/nginx/sites-available/yourdomain.com.conf

Aşağıdaki örnek yapılandırmayı dosyaya yapıştırın ve alan adınızı, kök dizininizi ve PHP-FPM soket yolunuzu kendi değerlerinizle değiştirin:

server {
    listen 80;
    listen [::]:80;
    server_name yourdomain.com www.yourdomain.com; # Alan adınızı buraya yazın
    root /var/www/html/yourdomain.com; # WordPress kök dizini

    index index.php index.html index.htm;

    error_log /var/log/nginx/yourdomain.com_error.log;
    access_log /var/log/nginx/yourdomain.com_access.log;

    # WordPress kalıcı bağlantıları (permalinks) için rewrite kuralları
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # PHP dosyalarını PHP-FPM'ye ilet
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock; # PHP-FPM soket yolu (Ubuntu)
        # fastcgi_pass 127.0.0.1:9000; # CentOS/varsayılan için
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # Statik dosyalar için önbellekleme
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 365d;
        log_not_found off;
    }

    # Gizli dosyaların (.ht* gibi) erişimini engelle
    location ~ /\.ht {
        deny all;
    }

    # XML-RPC saldırılarına karşı koruma (isteğe bağlı)
    # location ~* /xmlrpc.php$ {
    #     deny all;
    # }
}

Bu yapılandırma dosyasını kaydedin ve kapatın. Ardından, bu yapılandırmayı etkinleştirmek için sites-enabled dizinine bir sembolik bağlantı oluşturun:

sudo ln -s /etc/nginx/sites-available/yourdomain.com.conf /etc/nginx/sites-enabled/

Nginx’in varsayılan yapılandırmasını (genellikle default adlı dosyayı) devre dışı bırakmak isteyebilirsiniz:

sudo rm /etc/nginx/sites-enabled/default

Nginx yapılandırmasının sözdizimini kontrol edin ve servisi yeniden başlatın:

sudo nginx -t
sudo systemctl restart nginx

Artık tarayıcınızdan alan adınıza giderek WordPress kurulum sihirbazını tamamlayabilirsiniz.

Çoklu WordPress Sitelerini Nginx ile Yapılandırma (WordPress Multisite)

WordPress Multisite, tek bir WordPress kurulumu üzerinden birden fazla web sitesi çalıştırmanıza olanak tanır. Bu, özellikle blog ağları, üniversiteler veya farklı departmanlar için siteler sunan işletmeler için idealdir. Multisite, “Subdomain” (alt alan adı) veya “Subdirectory” (alt dizin) olmak üzere iki modda yapılandırılabilir.

WordPress Multisite Nedir?

WordPress Multisite, tüm sitelerin aynı WordPress çekirdek dosyalarını, eklentilerini ve temalarını paylaştığı bir ağ oluşturur. Her sitenin kendine ait bir veritabanı tablosu seti vardır, ancak tüm siteler aynı veritabanını kullanır.

* Subdomain Modu: Her yeni site, ana sitenin bir alt alan adı olarak oluşturulur (örneğin, site1.alanadiniz.com, site2.alanadiniz.com). Bu mod için wildcard (joker karakter) DNS kaydı gereklidir.
* Subdirectory Modu: Her yeni site, ana sitenin bir alt dizini olarak oluşturulur (örneğin, alanadiniz.com/site1, alanadiniz.com/site2). Bu mod için genellikle daha az DNS yapılandırması gerekir.

Multisite İçin Ön Gereksinimler

Tek site kurulumuna ek olarak, Multisite için bazı özel ön koşullar vardır:

Wildcard DNS Kaydı (Subdomain Modu İçin): Eğer subdomain modunu kullanacaksanız, DNS sağlayıcınızda .alanadiniz.com adresini sunucunuzun IP adresine işaret eden bir A kaydı oluşturmanız gerekmektedir.
* Temiz Permalinks: WordPress Multisite, kalıcı bağlantıların (permalinks) çalışması için sunucu tarafında rewrite kurallarına ihtiyaç duyar.
* WordPress Kurulumu: Zaten çalışan tek bir WordPress kurulumunuzun olması veya yeni bir kurulum yapıp Multisite’a dönüştürmeniz gerekmektedir.

WordPress Multisite Kurulum Adımları

1. WP_ALLOW_MULTISITE Tanımlama: wp-config.php dosyasını açın ve / That's all, stop editing! Happy publishing. / satırının hemen üzerine aşağıdaki kodu ekleyin:

define('WP_ALLOW_MULTISITE', true);

Bu, WordPress admin panelinde Multisite kurulum seçeneğini etkinleştirecektir.
2. WordPress Admin Panelinden Kurulum: WordPress yönetici panelinize giriş yapın. Araçlar > Ağ Kurulumu (Tools > Network Setup) menüsü altında Multisite’ı yapılandırma seçeneğini göreceksiniz.
* Subdomain veya Subdirectory seçimi: İstediğiniz modu seçin. Kurulumdan sonra bu modu değiştirmek zordur.
* Ağ Başlığı ve Yönetici E-posta: Gerekli bilgileri girin.
* Kurulumu Tamamlayın: WordPress size wp-config.php ve .htaccess (Nginx için bu kısım Nginx yapılandırmasına eklenecek) dosyalarına eklemeniz gereken kod parçacıklarını verecektir.
3. wp-config.php Güncellemesi: WordPress’in verdiği kodları wp-config.php dosyasına, define('WP_ALLOW_MULTISITE', true); satırının altına yapıştırın. Bu kodlar genellikle SUBDOMAIN_INSTALL, DOMAIN_CURRENT_SITE, PATH_CURRENT_SITE, SITE_ID_CURRENT_SITE ve BLOG_ID_CURRENT_SITE tanımlamalarını içerir.

Nginx Multisite Yapılandırması

WordPress’in verdiği .htaccess kurallarını Nginx yapılandırmasına dönüştürmemiz gerekiyor. Tek site için kullandığımız server bloğunu düzenleyeceğiz.

Subdomain Modu İçin Nginx Yapılandırması

Eğer subdomain modunu seçtiyseniz, Nginx server_name yönergesini wildcard kullanarak yapılandırmanız gerekir. Ayrıca, location / bloğundaki rewrite kurallarını da güncellemeniz gerekecektir.

server {
    listen 80;
    listen [::]:80;
    server_name yourdomain.com *.yourdomain.com; # Wildcard alan adını ekleyin
    root /var/www/html/yourdomain.com;

    index index.php index.html index.htm;

    error_log /var/log/nginx/yourdomain.com_error.log;
    access_log /var/log/nginx/yourdomain.com_access.log;

    # WordPress Multisite (Subdomain) rewrite kuralları
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # Multisite medya dosyaları için (isteğe bağlı, /wp-content/blogs.dir/ yerine /wp-content/uploads/sites/ kullanılır)
    location ~ ^/wp-content/blogs.dir/(.*)$ {
        try_files /wp-content/blogs.dir/$1 /index.php?$args;
    }
    location ~ ^/wp-content/uploads/sites/(\d+)/(.*)$ {
        try_files /wp-content/uploads/sites/$1/$2 /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 365d;
        log_not_found off;
    }

    location ~ /\.ht {
        deny all;
    }
}

Önemli Not: Modern WordPress Multisite kurulumları genellikle wp-content/blogs.dir yerine wp-content/uploads/sites/{ID} yapısını kullanır. Yukarıdaki yapılandırma her iki senaryoyu da kapsar.

Subdirectory Modu İçin Nginx Yapılandırması

Eğer subdirectory modunu seçtiyseniz, server_name aynı kalır ancak location / bloğundaki rewrite kuralları farklı olacaktır.

server {
    listen 80;
    listen [::]:80;
    server_name yourdomain.com www.yourdomain.com; # Wildcard gerekmez
    root /var/www/html/yourdomain.com;

    index index.php index.html index.htm;

    error_log /var/log/nginx/yourdomain.com_error.log;
    access_log /var/log/nginx/yourdomain.com_access.log;

    # WordPress Multisite (Subdirectory) rewrite kuralları
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # WordPress Multisite (Subdirectory) için medya dosyaları
    location ~ ^/([_0-9a-zA-Z-]+/)?wp-admin$ {
        try_files $uri $uri/ /index.php?$args;
    }
    location ~ ^/([_0-9a-zA-Z-]+/)?wp-login.php$ {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 365d;
        log_not_found off;
    }

    location ~ /\.ht {
        deny all;
    }
}

Yapılandırma dosyasını güncelledikten sonra, Nginx’i yeniden başlatmayı unutmayın:

sudo nginx -t
sudo systemctl restart nginx

Artık WordPress Multisite kurulumunuz Nginx üzerinde çalışıyor olmalı. Yönetici panelinden yeni siteler ekleyebilir ve yönetebilirsiniz.

Performans ve Güvenlik İçin Ek Nginx Ayarları

Nginx’in gücünü tam olarak kullanmak ve WordPress sitenizin performansını ile güvenliğini artırmak için ek yapılandırmalar yapabilirsiniz.

GZIP Sıkıştırma

GZIP sıkıştırma, sunucudan istemciye gönderilen metin tabanlı dosyaların (HTML, CSS, JavaScript) boyutunu küçülterek bant genişliğini azaltır ve yükleme sürelerini hızlandırır.
Nginx ana yapılandırma dosyasına (/etc/nginx/nginx.conf veya /etc/nginx/conf.d/gzip.conf gibi bir dosyaya) aşağıdaki ayarları ekleyin:

gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

Tarayıcı Önbellekleme

Tarayıcı önbellekleme, statik dosyaların (resimler, CSS, JS) istemci tarafında belirli bir süre saklanmasını sağlayarak, tekrarlayan ziyaretlerde bu dosyaların tekrar indirilmesini önler. Bu, sayfa yükleme sürelerini önemli ölçüde azaltır.
Her site için server bloğunuzdaki statik dosyalar için location bloğuna expires yönergesini ekleyebilirsiniz (yukarıdaki örneklerde zaten mevcut).

location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 365d; # 365 gün önbellekle
    log_not_found off;
}

HTTP/2 Desteği

HTTP/2, web sitelerinin yükleme hızını ve performansını artırmak için tasarlanmış, HTTP protokolünün yeni bir sürümüdür. Nginx, HTTP/2’yi SSL/TLS ile birlikte destekler.
listen yönergesine http2 parametresini ekleyerek etkinleştirebilirsiniz:

listen 443 ssl http2;

SSL/TLS Yapılandırması

SSL/TLS (HTTPS), siteniz ve kullanıcılarınız arasındaki iletişimi şifreleyerek güvenliği artırır. Let’s Encrypt gibi hizmetler sayesinde ücretsiz SSL sertifikaları alabilirsiniz.
Bir sertifika aldıktan sonra, Nginx yapılandırmanıza aşağıdaki gibi bir server bloğu eklemeniz gerekir:

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name yourdomain.com www.yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; # Sertifika yolu
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; # Anahtar yolu

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    # HTTP'den HTTPS'ye yönlendirme (isteğe bağlı, ayrı bir 80 portu server bloğu ile yapılır)
    # return 301 https://$server_name$request_uri;

    # Diğer WordPress ayarları buraya gelir (root, index, location / vb.)
    root /var/www/html/yourdomain.com;
    index index.php index.html index.htm;
    # ... diğer location blokları ...
}

HTTP trafiğini HTTPS'ye yönlendirmek için ayrı bir server bloğu

server { listen 80; listen [::]:80; server_name yourdomain.com www.yourdomain.com; return 301 https://$server_name$request_uri; }

WordPress içinde de Ayarlar > Genel kısmından site URL’lerini HTTPS olarak güncellemeniz veya wp-config.php dosyasına aşağıdaki satırları eklemeniz gerekebilir:

define('FORCE_SSL_ADMIN', true);
define('WP_HOME','https://yourdomain.com');
define('WP_SITEURL','https://yourdomain.com');

Güvenlik Başlıkları

Nginx, çeşitli HTTP güvenlik başlıklarını ayarlayarak sitenizin güvenliğini artırmanıza olanak tanır. Bu başlıklar, XSS (Cross-Site Scripting), Clickjacking ve diğer yaygın saldırı türlerine karşı koruma sağlar.
server bloğunuzun içine aşağıdaki başlıkları ekleyebilirsiniz:

add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
add_header Referrer-Policy "no-referrer-when-downgrade";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; # Sadece HTTPS için

WordPress Özel Güvenlik Ayarları

WordPress’in bazı hassas dizinlerine veya dosyalarına doğrudan erişimi kısıtlamak güvenlik açısından faydalıdır.
* wp-content, wp-includes Dizini İçin Erişim Kısıtlamaları:

location ~ /(wp-content|wp-includes)/.*\.php$ {
        deny all;
        return 403;
    }

* XML-RPC Kısıtlaması: Eğer XML-RPC kullanmıyorsanız, onu devre dışı bırakmak iyi bir güvenlik uygulamasıdır.

location ~* /xmlrpc.php$ {
        deny all;
        return 403;
    }

* wp-config.php Koruması:

location ~* wp-config.php {
        deny all;
        return 403;
    }

Sık Karşılaşılan Sorunlar ve Çözümleri

Nginx ve WordPress yapılandırmasında bazı yaygın sorunlarla karşılaşabilirsiniz. İşte bunlardan bazıları ve olası çözümleri:

502 Bad Gateway Hatası

Bu hata genellikle Nginx’in PHP-FPM ile iletişim kuramadığı anlamına gelir.
* Çözüm: PHP-FPM servisinin çalışıp çalışmadığını kontrol edin (sudo systemctl status php8.1-fpm). Eğer çalışmıyorsa, başlatın. PHP-FPM günlüklerini (/var/log/php8.1-fpm.log veya benzeri) kontrol edin. Nginx yapılandırmasındaki fastcgi_pass yönergesinin doğru soket yolunu veya IP adresini/portu gösterdiğinden emin olun. PHP-FPM havuzu (pool) ayarlarında (www.conf) listen yönergesinin Nginx ile aynı şekilde yapılandırıldığını doğrulayın.

404 Not Found Hatası

Bu hata, Nginx’in istenen dosyayı veya kaynağı bulamadığı anlamına gelir.
* Çözüm: Nginx server bloğundaki root yönergesinin WordPress kurulumunuzun doğru kök dizinini gösterdiğinden emin olun. WordPress kalıcı bağlantıları için location / bloğundaki try_files kurallarının doğru olduğundan emin olun (örneğin /index.php?$args). Dosya izinlerini kontrol edin; Nginx’in web kök dizinine ve içindeki dosyalara erişim izni olmalıdır.

Permalinks (Kalıcı Bağlantılar) Çalışmıyor

WordPress admin panelinde kalıcı bağlantıları ayarladıktan sonra 404 hataları alıyorsanız.
* Çözüm: Nginx yapılandırmanızdaki location / bloğunun WordPress’in rewrite kurallarını doğru bir şekilde içerdiğinden emin olun: try_files $uri $uri/ /index.php?$args;. Bu kural, mevcut bir dosya veya dizin bulunamazsa isteği index.php‘ye yönlendirir.

Dosya Yükleme Boyutu Sınırı

WordPress medya yükleyicisinde büyük dosyalar yüklemeye çalışırken hata alıyorsanız.
* Çözüm:
* Nginx: http veya server bloğunuzda client_max_body_size yönergesini artırın (örneğin client_max_body_size 64M;).
* PHP-FPM: php.ini dosyasında (/etc/php/8.1/fpm/php.ini) upload_max_filesize ve post_max_size değerlerini artırın (örneğin upload_max_filesize = 64M ve post_max_size = 64M).
* Değişikliklerden sonra Nginx ve PHP-FPM servislerini yeniden başlatmayı unutmayın.

HTTPS Yönlendirme Sorunları

HTTPS’ye geçiş yaptıktan sonra yönlendirme döngüleri veya karma içerik (mixed content) uyarıları alıyorsanız.
* Çözüm:
* WordPress Ayarlar > Genel kısmındaki “WordPress Adresi (URL)” ve “Site Adresi (URL)” alanlarının https:// ile başladığından emin olun.
* wp-config.php dosyasında FORCE_SSL_ADMIN, WP_HOME ve WP_SITEURL tanımlamalarını doğru bir şekilde yaptığınızdan emin olun.
* Nginx’in HTTP’den HTTPS’ye yönlendirme kurallarını kontrol edin ve doğru çalıştığından emin olun. add_header Strict-Transport-Security başlığı, tarayıcıların sitenize her zaman HTTPS üzerinden bağlanmasını zorlar, ancak ilk ziyaretin HTTPS ile yapıldığından emin olmanız gerekir.

Sonuç

Nginx ile tek ve çoklu WordPress site yapılandırması, başlangıçta biraz teknik bilgi gerektirse de, sunduğu performans ve ölçeklenebilirlik avantajları göz önüne alındığında çabaya değerdir. Doğru yapılandırma ile WordPress siteleriniz daha hızlı yüklenir, daha fazla trafiği kaldırabilir ve daha güvenli hale gelir. Bu makalede ele alınan adımlar ve ipuçları, Nginx’in WordPress için nasıl optimize edileceğine dair kapsamlı bir rehber sunmaktadır. Unutulmamalıdır ki, sunucu yapılandırması sürekli bir bakım ve izleme sürecidir. Güncellemeleri takip etmek, yedeklemeleri düzenli yapmak ve güvenlik önlemlerini sürekli gözden geçirmek, WordPress sitelerinizin Nginx üzerinde sorunsuz ve verimli bir şekilde çalışmaya devam etmesini sağlayacaktır.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.