# Nginx 403 Forbidden hatası: nedenleri ve çözümü

https://kervanhosting.com/bilgi-bankasi/makale/nginx-403-forbidden-hatasi-nedenleri-ve-cozumu

Nginx'in 403 Forbidden vermesi, sunucunun isteğinizi anladığını ama o kaynağa erişmenize izin vermediğini söyler. Bu, 404 (bulunamadı) hatasından farklıdır: kaynak büyük olasılıkla vardır, Nginx onu sunamamaktadır. Sebebi her zaman `error.log`'da yazar; tahmin etmeden önce oraya bakın.

```
sudo tail -n 20 /var/log/nginx/error.log
```

## Günlük mesajına göre çözüm

**1. `directory index of "/var/www/ornek.com/" is forbidden`**

Klasörde varsayılan bir sayfa yok ve Nginx'te dizin listeleme kapalı. Siteniz için `index.html` ya da `index.php` gibi bir dosya koyun, ya da ayarda `index` satırının doğru dosya adlarını içerdiğinden emin olun (`index index.php index.html;`). PHP sitelerinde `index.php`'nin listede olması gerekir. Dizin listelemeyi bilerek açmak isterseniz (yalnızca dosya paylaşımı klasörleri için) `autoindex on;` kullanabilirsiniz.

**2. `open() "/var/www/ornek.com/index.html" failed (13: Permission denied)`**

Nginx dosyayı okuyamıyor. Üç kontrol:

1. Nginx hangi kullanıcıyla çalışıyor? `ps aux | grep "nginx: worker"` (genelde `www-data`).
2. Dosya ve klasör izinleri: dosyalar en az 644, klasörler 755 olmalı. Önemli olan, **yolun üzerindeki her klasörün** (`/var`, `/var/www`, `/var/www/ornek.com`) çalıştırma (x) iznine sahip olmasıdır. `namei -l /var/www/ornek.com/index.html` komutu yoldaki tüm izinleri sırayla gösterir ve nerede takıldığını ortaya çıkarır.
3. Siteyi bir ev dizininde (`/home/ali/site`) tutuyorsanız ev dizini varsayılan olarak başkalarına kapalıdır. Siteyi `/var/www` altına taşıyın ya da ev dizinine Nginx kullanıcısı için izin verin.

Düzeltme örneği:

```
sudo chown -R www-data:www-data /var/www/ornek.com
sudo find /var/www/ornek.com -type d -exec chmod 755 {} \;
sudo find /var/www/ornek.com -type f -exec chmod 644 {} \;
```

**3. `access forbidden by rule`**

Ayar dosyasında bir `deny` kuralı sizin adresinizi ya da yolu engelliyor. `sudo nginx -T | grep -n -E "deny|allow"` ile tanımlı kuralları arayın. Örneğin `location ~ /\.` gibi gizli dosyaları engelleyen bir kural, `/.well-known/` klasörünü de engelliyorsa Let's Encrypt doğrulaması 403 alır: kuralı `location ~ /\.(?!well-known)` biçiminde yazın.

**4. SELinux ya da AppArmor** (AlmaLinux gibi sistemlerde) dosya erişimini bağlam yüzünden engelleyebilir. Ubuntu ve Debian şablonlarımızda varsayılan olarak bu sorun yoktur.

## PHP dosyaları için ek kontrol

PHP dosyası 403 veriyorsa ayarda `location ~ \.php$` bloğu yoksa ya da `fastcgi_pass` yanlışsa 403/404 görürsünüz. PHP-FPM çalışıyor mu bakın: [502 makalesi](https://kervanhosting.com/bilgi-bankasi/makale/nginx-502-bad-gateway-hatasi-nedenleri-ve-cozumu). Gizli dosyaları kapatan kuralı kasıtlı koyduysanız (`.env`, `.git` gibi), bu dosyalara erişimde 403 almanız doğru davranıştır.

## Hosting paketinde

Hosting'de Nginx ayarı sizde değildir; 403 genellikle ana klasörde `index.html` ya da `index.php` olmaması ya da dosya izinlerinin hatalı olmasındandır: [hosting'de 403, 404, 500](https://kervanhosting.com/bilgi-bankasi/makale/hosting-sitem-403-404-veya-500-hatasi-veriyor).

## Sık sorulanlar

### 403 ile 404 arasındaki fark ne?

404 aradığınız kaynağın bulunamadığını, 403 bulunup erişime izin verilmediğini ifade eder. Ama bir klasör için index dosyası eksikse Nginx 403 verir; bu yüzden bir sayfanın hiç var olmadığı durumda da 403 görebilirsiniz.

### İzinleri 777 yapsam düzelir mi?

Bazen düzelir ama güvenlik açığı yaratır. Doğru sahip ve 755/644 kullanın.

### Sadece belirli IP'ler için 403 veriyor.

Ayarınızda `allow` ve `deny` kuralları var. Bir `deny all;` öncesinde izin vereceğiniz adresleri `allow` ile tanımladığınızdan emin olun.

**İlgili makaleler**

- [Nginx ile tek sunucuda birden fazla web sitesi (server block)](https://kervanhosting.com/bilgi-bankasi/makale/nginx-ile-birden-fazla-web-sitesi-server-block-sanal-host)
- [Hosting'de sitem 403, 404 veya 500 hatası veriyor](https://kervanhosting.com/bilgi-bankasi/makale/hosting-sitem-403-404-veya-500-hatasi-veriyor)
- [Nginx 502 Bad Gateway hatası: nedenleri ve çözümü](https://kervanhosting.com/bilgi-bankasi/makale/nginx-502-bad-gateway-hatasi-nedenleri-ve-cozumu)

*Sorununuz çözülmediyse [destek talebi açın](https://kervanhosting.com/destek-taleplerim). Hangi adımı denediğinizi ve ekranda ne gördüğünüzü yazarsanız çözüm çok daha hızlı olur.*
