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.

5 dk okuma 13 görüntülenme
403 forbidden nginx hatası çözümü

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)

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

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

    Dosya 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_name bloğ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 -t

    Eğer "successful" yazıyorsa devam edin. Hata varsa düzeltip tekrar deneyin.

  3. 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/html

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

  4. 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 http veya server bloğu içinde bulunmalı. Yoksa ekleyin. Dosyayı kaydedin ve nginx'i yeniden başlatın:

    sudo systemctl restart nginx

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

    Nginx'i yeniden başlatın:

    sudo systemctl restart nginx

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

    Bundan 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 644 komutunu ç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 -t ile 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?+
403 hatasında dosya sunucuda mevcuttur ama erişim izniniz yoktur. 404 hatasında ise dosya sunucuda hiç yoktur. 403 çıkıyorsa dosya kesinlikle mevcuttur ve izin sorunu vardır.

Bülten Aboneliği

Haftada bir, teknoloji ve dijital dünyadan seçtiklerimiz e-postanda. Spam yok, sadece içerik.

Benzer Haberler

Yorumlar

0
Henüz yorum yok. İlk yorumu sen yap!