403 Forbidden Nginx Hatası Nedenleri ve 6 Adımda Nasıl Çözülür
403 Forbidden nginx hatası, sunucunun belirli kaynağa erişimi engellemesi durumudur. Dosya izinlerini düzeltmek, nginx konfigürasyonunu kontrol etmek ve IP engelleme listesini gözden geçirmek sorunu çözer.

TLDR: 403 Forbidden hatası, sunucunun belirli bir dosya veya dizine erişim izni vermediği anlamına gelir. Çoğu zaman dosya/klasör izinlerini 755 (klasörler) veya 644 (dosyalar) olarak düzeltmek, nginx konfigürasyonunu kontrol etmek veya IP engellemesini kaldırmak sorunu çözer. Web siteniz yeni kurulmuş veya dosya taşıması yapılmışsa bu adımları sırasıyla uygulayın.
İçindekiler ›
403 Forbidden Hatası Ne Anlama Gelir?
403 Forbidden, HTTP durum kodu olarak sunucunun isteğinizi anlamış (200-399 arasında değil), ancak istediğiniz kaynağa erişim izni vermediği anlamına gelir. Nginx web sunucusu, bir dosya, klasör veya sayfaya erişmeye çalışırken bu kodu gönderir. "Erişim Reddedildi" mesajı tarayıcıda görüntülenebilir.
404 (Sayfa Bulunamadı) hatası ile karıştırılmamalıdır. 403'te dosya/sayfa vardır ama erişme izniniz yoktur. 404'te dosya sunucuda olmaz.
403 Forbidden Hatası Neden Oluşur?
- Dosya/Klasör İzin Sorunları: Linux/Unix sunucularda dosya veya klasörlerin izinleri (permissions) yanlış ayarlanmışsa nginx erişim engeller. Klasörlerin 755, dosyaların 644 olması gerekir.
- Nginx Konfigürasyonu Hatalı: nginx.conf dosyasında yanlış dizin ayarları, root yolu tanımlanmamışsa veya location blokları yanlış ayarlanmışsa hata çıkar.
- index Dosyası Tanımlanmamış: Klasöre direkt erişildiğinde (örn: example.com/klasor/) nginx hangi dosyayı açacağını bilmezse 403 döner.
- IP Engelleme Kuralları: Nginx içinde allow/deny kuralları ayarlanmışsa veya .htaccess dosyasında IP blokalı varsa hata oluşur.
- Dosya Sahibi Yanlış: Dosya/klasör sahibi nginx daemon kullanıcısı olmamışsa (genelde www-data veya nginx) erişim reddedilebilir.
- SELinux/AppArmor Güvenlik Modülleri: Sunucu üzerinde SELinux etkinse, dosyaya erişim için özel bağlam (context) kurulması gerekebilir.
Çözüm Adımları (Kolay → Zor Sırasıyla)
- Tarayıcı Önbelleğini Temizleyin
Bazen eski 403 hatası tarayıcının önbelleğinde kalır. Chrome/Firefox/Edge'de Ctrl+Shift+Del (Windows) veya Cmd+Shift+Del (Mac) tuşlarına basın. "Tüm zamanlar" seçeneğini işaretleyip cache'i temizleyin. Sayfayı yenile (F5) ve hatanın hala görünüp görünmediğini kontrol edin.
- Nginx Konfigürasyonunun Temel Parametrelerini Doğrulayın
SSH ile sunucunuza bağlanın ve nginx ayarlarını açın:
sudo nano /etc/nginx/nginx.confDosya içinde şu satırları bulun:
user www-data;(veya nginx, apache — hangi kullanıcı olduğu önemli)http { server { root /var/www/html; } }(root yolu doğru mu kontrol edin)Eğer
server_namebloğunda doğru domain yazılmamışsa veya root yolu yanlışsa düzeltin. Dosyayı kaydet (Ctrl+X, ardından Y ve Enter).Syntax hatası kontrolü yapın:
sudo nginx -tEğer "successful" yazıyorsa devam edin. Hata varsa düzeltip tekrar deneyin.
- Dosya ve Klasör İzinlerini Düzeltin
Bu, 403 hatasının en sık sebebidir. SSH'ta proje dizinine gidin:
cd /var/www/html(kendi yolunuzu yazın)Tüm klasörlerin izinlerini 755'e ayarlayın:
sudo find . -type d -exec chmod 755 {} \;Tüm dosyaların izinlerini 644'e ayarlayın:
sudo find . -type f -exec chmod 644 {} \;Bundan sonra index dosyalarını (index.html, index.php) kontrol edin:
ls -la index.htmlÇıktıda -rw-r--r-- (644) görülmelidir. Dosya sahibini de kontrol edin:
sudo chown -R www-data:www-data /var/www/htmlBu, klasördeki tüm dosyaların sahibini www-data kullanıcısına değiştirir. Değişiklikten sonra tarayıcıda sayfayı yenile.
- Index Dosyasının Tanımlanmış Olduğunu Kontrol Edin
Nginx, klasöre direkt erişildiğinde hangi dosyayı açacağını bilmezse 403 verir. nginx.conf dosyasını açıp şu satırı kontrol edin:
index index.html index.htm index.php;Bu satır
httpveyaserverbloğu içinde bulunmalı. Yoksa ekleyin. Dosyayı kaydedin ve nginx'i yeniden başlatın:sudo systemctl restart nginx - IP Engelleme Kurallarını Kontrol Edin
Nginx konfigurasyonunda allow/deny kuralları varsa bunlar 403'e neden olabilir. nginx.conf dosyasında şu satırları arayın:
deny 192.168.1.0/24;allow all;Eğer kendi IP adresiniz deny listesine alınmışsa, satırı silin veya yorum satırı yapın (# koyun). Dosyayı kaydedin ve syntax kontrol edin:
sudo nginx -tNginx'i yeniden başlatın:
sudo systemctl restart nginx - SELinux Bağlamını Kontrol Edin (CentOS/RHEL Sunucuları)
SELinux etkin sunucularda dosyaların doğru bağlamı (context) olması gerekir. SSH'ta kontrol edin:
getenforceÇıktı "Enforcing" veya "Permissive" ise SELinux aktiftir. Dosyaların web sunucusu için doğru bağlamı olduğundan emin olun:
sudo chcon -R -t httpd_sys_rw_content_t /var/www/htmlBundan sonra tarayıcıda sayfayı yenile ve hatanın kalkıp kalkmadığını kontrol edin.
Nginx Yeniden Başlatıldıktan Sonra Hatanın Hala Çıkması Durumu
Adımlar sonrasında hata devam ediyorsa:
Nginx error log dosyasını kontrol edin:
sudo tail -50 /var/log/nginx/error.log
Bu komut son 50 satırda hata mesajlarını gösterir. Örneğin:
permission denied while opening "/var/www/html/index.html" ← İzin sorunu
FastCGI sent invalid header from upstream ← PHP sorunu (eğer PHP kullanıyorsanız)
Hata loğundan görünen soruna göre ilgili adımı tekrarlayın.
Farklı Sistemler İçin Dosya Sahibi Komutları
| Web Sunucusu Türü | Varsayılan Kullanıcı | Komut |
|---|---|---|
| Nginx + Ubuntu/Debian | www-data | sudo chown -R www-data:www-data /var/www/html |
| Nginx + CentOS/RHEL | nginx | sudo chown -R nginx:nginx /var/www/html |
| Apache + Ubuntu/Debian | www-data | sudo chown -R www-data:www-data /var/www/html |
| Apache + CentOS/RHEL | apache | sudo chown -R apache:apache /var/www/html |
Önemli Uyarı: Dosya izinlerini 777 (herkes yazabilir) olarak ayarlamayın. Bu ciddi güvenlik açığı oluşturur. Daima 755 (klasörler) ve 644 (dosyalar) kullanın. Sadece geçici dosya yükleme klasörleri için 775 veya 775 düşünülebilir.
Özel Durumlar: Subdomain ve Virtual Host Sorunları
Eğer 403 hatası sadece belirli bir subdomain'de veya virtual host'ta çıkıyorsa:
sudo nano /etc/nginx/sites-available/subdomain.conf
Dosyada şu kısmı kontrol edin:
server {
listen 80;
server_name sub.example.com;
root /var/www/subdomain;
index index.html index.php;
}
Root yolunun var olduğundan emin olun:
ls -la /var/www/subdomain
Klasör yoksa oluşturun:
sudo mkdir -p /var/www/subdomain
İzinleri ayarlayın:
sudo chmod 755 /var/www/subdomain
Sahibini değiştirin:
sudo chown www-data:www-data /var/www/subdomain
Önleyici İpuçları
- Yeni Dosya Yükledikten Sonra: SFTP veya FTP ile dosya yüklediğinizde izinler otomatik olarak yanlış ayarlanabilir. Yükleme sonrası
chmod 644komutunu çalıştırın. - Düzenli Log Kontrolü: Haftada bir kez error.log dosyasını kontrol edin. Sorunlar hata loğunda görülür.
- Yedekleme Öncesi Test: Sunucuda yapılandırma değişikliği yapıyorsanız,
sudo nginx -tile syntax hatasını kontrol etmeyi unutmayın. - Geliştirme Sunucusunda Önce Deneyin: Production sunucuda yapacağınız değişiklikleri test ortamında deneyin.
- Dosya İzinleri Dökümanı: Projenizin kök dizinine bir .txt dosya oluşturup "Klasörlerin izni 755, dosyaların izni 644 olmalıdır" yazısını yapıştırın. Sonraki çalışanlara yardımcı olacaktır.
403 Forbidden hatası ile 404 Not Found arasındaki fark nedir?+
Bülten Aboneliği
Haftada bir, teknoloji ve dijital dünyadan seçtiklerimiz e-postanda. Spam yok, sadece içerik.


