PHP Forum İçin Nginx Yapılandırması
Front Controller (Ön Yönetici) Yapısı
PHP tabanlı bir forumda tüm istekler genellikle tek bir giriş noktasına (örneğin index.php) yönlendirilir. Nginx'te bunu sağlamak için aşağıdaki gibi bir location bloğu kullanılır:
location / {
try_files $uri $uri/ /index.php?$query_string;
}Bu yapı, mevcut dosya veya dizin yoksa isteği index.php'ye yönlendirir. Forum yazılımı, gelen parametrelere göre uygun sayfayı oluşturur. Örneğin, /forum/konu/123 gibi bir URL, index.php?route=konu&id=123 şeklinde işlenir.
Statik Dosya Cache (Önbellek) Ayarları
Statik dosyaların (CSS, JS, resimler) önbelleğe alınması, sayfa yüklemelerini hızlandırır. Nginx'te aşağıdaki gibi bir location bloğu ekleyin:
location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg|woff2?)$ {
expires 30d;
add_header Cache-Control "public, immutable";
access_log off;
log_not_found off;
}Bu ayar, belirtilen dosya türlerine 30 günlük bir önbellek süresi verir. Tarayıcı bu dosyaları yeniden indirmez, bu da performansı artırır.
Gizli Dosyaları Engelleme
Foruma ait yapılandırma dosyaları (.env, .git, .htaccess gibi) ve sistem dosyaları dışarıdan erişime kapatılmalıdır. Nginx'te şu şekilde engelleyin:
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}Bu kural, nokta ile başlayan tüm dosya ve dizinlere erişimi reddeder.
Upload Güvenliği
Forum üzerinden yüklenen dosyaların güvenliği kritiktir. Nginx'te upload dizini için yürütme iznini kaldırın ve yalnızca belirli dosya türlerine izin verin:
location /uploads/ {
location ~ \.php$ {
deny all;
}
location ~* \.(php|phtml|php3|php4|php5|php7|phar)$ {
deny all;
}
try_files $uri =404;
}Ayrıca, yüklenen dosyaların boyutunu sınırlamak için PHP-FPM ayarlarında upload_max_filesize ve post_max_size değerlerini belirleyin.
Önerilen PHP-FPM ayarları:Güvenlik Başlıkları (Security Headers)
- upload_max_filesize = 20M
- post_max_size = 25M
- max_execution_time = 300
HTTP yanıt başlıkları, çeşitli saldırılara karşı koruma sağlar. Nginx'te aşağıdaki başlıkları ekleyin:
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;İsteğe bağlı olarak Content-Security-Policy (CSP) başlığı da eklenebilir, ancak forum eklentileriyle uyumluluk test edilmelidir.
PHP-FPM Ayarları ve Nginx Entegrasyonu
PHP-FPM ile Nginx arasındaki iletişim için aşağıdaki location bloğu kullanılır:
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}PHP-FPM havuz ayarlarını da optimize edin. Örneğin, /etc/php/8.3/fpm/pool.d/www.conf dosyasında:
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35Bu ayarlar, forum trafiğine göre ayarlanmalıdır.
Özet
Front controller ile tüm istekler index.php'ye yönlendirilir.
Statik dosyalar için uzun süreli önbellek ve cache-control başlıkları eklenir.
Gizli dosyalara erişim engellenir.
Upload dizininde PHP çalıştırılması engellenir ve dosya boyutu sınırlanır.
Güvenlik başlıkları (X-Frame-Options, X-Content-Type-Options vb.) eklenir.
PHP-FPM ayarları performans ve güvenlik için optimize edilir.