403 Forbidden, NGINX’in isteği anladığı ancak kaynağa erişimi reddettiği anlamına gelir. Sorun eksik index dosyası, klasör yürütme izni, sahiplik, allow/deny kuralı, SELinux, symlink politikası veya güvenlik katmanından kaynaklanabilir.
2026/07/17 03:31:08 [error] 2261#2261: *731 directory index of "/var/www/example/" is forbidden
2026/07/17 03:31:12 [error] 2261#2261: *734 open() "/var/www/example/index.php" failed (13: Permission denied)
403, dosya bulunamadı anlamına gelen 404’ten farklıdır. NGINX kaynağı veya dizini görüyor olabilir fakat yapılandırma ya da işletim sistemi erişimi isteği engeller.
Dizin isteğinde index.php veya index.html bulunmaz ve autoindex kapalıysa NGINX 'directory index ... is forbidden' yazar. Bu durumda izinleri artırmak yerine document root ve index yönergesi doğrulanmalıdır.
Dosyanın 644, klasörün 755 olması tek başına yeterli değildir. NGINX worker kullanıcısının document root’a kadar tüm üst klasörlerde yürütme izni bulunmalıdır.
allow ve deny kuralları sırayla değerlendirilir. Üst http/server bloğundan miras kalan bir deny veya yanlış IP ağı yalnız belirli ziyaretçilerin 403 görmesine yol açabilir.
RHEL tabanlı sistemlerde Unix izinleri doğru görünse bile SELinux context erişimi engelleyebilir. Güvenlik katmanı kapatılmadan önce AVC kaydı incelenmelidir.
403 çözümünde 777 kullanmak tanı değil güvenlik açığıdır; namei, stat, NGINX worker ve güvenlik loglarıyla erişim zinciri kanıtlanmalıdır.
E-postada, tarayıcıda veya SSH günlüğünde gördüğünüz ifadeyi aratın. Her kartta anlam, muhtemel neden ve güvenli ilk işlem bulunur.
Anlamı: Dizinde uygun index dosyası yok veya dizin listeleme kapalı.
Muhtemel neden: Yanlış root, eksik index veya index yönergesi.
Anlamı: NGINX dosyayı işletim sistemi seviyesinde açamıyor.
Muhtemel neden: Dosya/klasör izinleri, sahiplik, ACL veya SELinux.
Anlamı: NGINX allow/deny veya benzeri erişim kuralı isteği engelledi.
Muhtemel neden: Yanlış IP ağı, include dosyası veya üst bloktan miras.
Anlamı: Symlink politikası veya hedef yol erişimi reddedildi.
Muhtemel neden: disable_symlinks, izin veya sahiplik uyumsuzluğu.
Anlamı: Genel tarayıcı mesajı kök nedeni göstermiyor.
Muhtemel neden: Index, izin, erişim kuralı veya güvenlik katmanı.
Anlamı: Sunucu yapılandırması istemciyi reddetti.
Muhtemel neden: IP kuralı, location deny veya Plesk ek direktifi.
Anlamı: Kernel güvenlik politikası NGINX erişimini engelledi.
Muhtemel neden: Yanlış context veya gerekli boolean kapalı.
Anlamı: FastCGI hedefi yanlış script yoluna işaret ediyor.
Muhtemel neden: root/alias ve SCRIPT_FILENAME uyumsuzluğu.
Bu ifadeyle eşleşen kayıt bulunamadı.
Komutlar root erişimi içindir. Önce yalnızca durum ve log toplayın; nedeni görmeden kalıcı ayar değiştirmeyin.
namei -l /var/www/example/index.php
stat /var/www/example /var/www/example/index.php
getfacl -p /var/www/example 2>/dev/null
Üst klasörler dâhil tüm erişim zincirini gösterir.
ps -eo user,group,cmd | grep '[n]ginx: worker'
grep -n '^user' /etc/nginx/nginx.conf
Dosyalara erişmesi gereken gerçek kullanıcıyı belirler.
nginx -T | grep -nE 'server_name|root |alias |index |allow |deny |disable_symlinks'
Etkin sanal host ve erişim yönergelerini gösterir.
getenforce
ls -Zd /var/www/example
ausearch -m AVC -ts recent | tail -n 50
Unix izinleri dışında SELinux engelini doğrular.
tail -n 150 /var/log/nginx/error.log
curl -skI https://example.com/
İstek ve log satırını aynı anda test eder.
nginx -t && systemctl reload nginx
Yapılandırma başarılıysa kesintisiz uygular.
NGINX hatasının temel nedeni aynı olsa da paket yolları, servis adları, güvenlik katmanları ve sanal host yönetimi kullanılan Linux dağıtımına veya Plesk altyapısına göre değişir.
NGINX 403 Forbidden için systemd, paket yolu ve journald kontrolleri.
namei -l /var/www/example/index.php
nginx -T | grep -nE 'root |index |allow |deny '
tail -n 100 /var/log/nginx/error.logNGINX 403 Forbidden için SELinux, PHP-FPM pool ve RHEL tabanlı servis kontrolleri.
namei -l /var/www/example/index.php
getenforce
ausearch -m AVC -ts recent | tail -n 30Plesk tarafından üretilen NGINX sanal host dosyalarında nginx 403 forbidden kontrolü.
tail -n 100 /var/www/vhosts/system/example.com/logs/proxy_error_log
plesk repair web example.com -n
nginx -tÖnce NGINX’in hangi nedenle reddettiğini belirleyin; index, izin, erişim kuralı ve güvenlik katmanını ayrı ayrı test edin.
Hata herkeste mi, yalnız belirli IP veya dizinde mi ayırın.
curl -skI https://example.com/korumali/Directory index, permission denied veya access forbidden ifadesini bulun.
tail -n 100 /var/log/nginx/error.logEtkin server bloğunun gerçek dosya yoluna baktığını kontrol edin.
nginx -T | grep -nE 'server_name|root |index 'Tüm üst klasörlerde NGINX worker için yürütme izni bulunmalıdır.
namei -l /var/www/example/index.phpallow/deny, ACL, SELinux ve WAF kayıtlarını ayırın.
nginx -T | grep -nE 'allow |deny '; ausearch -m AVC -ts recent | tailYalnız hatalı yol/kural üzerinde değişiklik yapın ve yeni 403 kaydını kontrol edin.
nginx -t && systemctl reload nginx
curl -skI https://example.com/korumali/Doğru index dosyasını ekleyin veya bilinçli ise autoindex kararını verin.
ls -la /var/www/example; nginx -T | grep -n 'index 'allow/deny, WAF ve fail2ban kayıtlarını kontrol edin.
nginx -T | grep -nE 'allow |deny 'Gerçek hedefin izinleri ve disable_symlinks yönergesi incelenmelidir.
readlink -f /var/www/example/current; namei -l /var/www/example/currentSELinux AVC kaydı ve dosya context’i kontrol edilmelidir.
ls -Zd /var/www/example; ausearch -m AVC -ts recent | tailUploads sahipliği, hotlink/WAF kuralı ve location eşleşmesini ayırın.
curl -skI https://example.com/wp-content/uploads/test.jpgDomains ekranındaki Additional nginx directives içeriğini gözden geçirin.
plesk repair web example.com -nEksik index dosyası, yanlış root, dosya izinleri, sahiplik, allow/deny kuralları, SELinux veya güvenlik katmanı en yaygın nedenlerdir.
Önce doğru document root içinde index.php veya index.html bulunduğunu ve index yönergesinin bu dosyayı içerdiğini doğrulayın.
Hayır. 777 güvenlik açığı oluşturur ve gerçek sahibi/erişim zinciri sorununu gizler. namei, stat ve worker kullanıcı kontrolü yapılmalıdır.
SELinux, ACL, allow/deny, WAF, symlink politikası veya yanlış document root Unix izinleri doğru olsa bile 403 üretebilir.
nginx.conf içindeki user yönergesini ve çalışan worker process kullanıcılarını ps komutuyla kontrol edin.
Uploads izinleri, güvenlik eklentisi, WAF, hotlink kuralı, deny location veya yanlış PHP script yolu neden olabilir.
Önce domain proxy_error_log ve ek NGINX direktifleri kontrol edilmeli; gerekirse ilgili domain için plesk repair web komutu kullanılmalıdır.
cPanel, WHM, CloudLinux, LiteSpeed, MariaDB, Exim ve güvenlik katmanlarını birlikte analiz ederek yalnızca servisi kaldırmak yerine arızanın temel nedenini gideriyoruz.