NGINX 404 hatası çoğu zaman dosyanın gerçekten bulunmamasından değil, yanlış document root, server_name, root/alias kullanımı veya front-controller için eksik try_files kuralından kaynaklanır. Rehber WordPress, Laravel ve SPA senaryolarını ayrı ayrı ele alır.
2026/07/17 03:48:20 [error] 2307#2307: *912 open() "/usr/share/nginx/html/urun/42" failed (2: No such file or directory)
GET /urun/42 HTTP/2.0 404
NGINX istek URI’sini etkin server ve location bloğunda bir dosya/dizin yoluna eşler. Yanlış eşleşme veya eksik fallback, uygulama route’u mevcut olsa bile 404 üretir.
Ana sayfa açılıp alt sayfalar 404 veriyorsa WordPress/Laravel gibi front-controller uygulamalarda location / içindeki try_files kuralı ilk şüphedir.
root yönergesi URI’yi belirtilen köke ekler; alias ise eşleşen location bölümünü farklı yolla değiştirir. Regex location ile alias kullanımı dikkatli yapılmazsa dosya yolu yanlış hesaplanır.
server_name eşleşmezse istek varsayılan server bloğuna düşebilir. Bu durumda doğru dosyalar sunucuda olsa bile başka document root üzerinden 404 görülür.
React/Vue gibi SPA uygulamalarında gerçek statik dosya bulunmadığında index.html’e fallback gerekir; API ve statik asset location’ları bu fallback’ten ayrılmalıdır.
404’ü tüm istekleri index.php veya index.html’e zorlayarak gizlemeyin; statik dosya, API ve gerçek olmayan URL davranışı ayrı kalmalı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ı: NGINX hesapladığı dosya yolunda kaynak bulamadı.
Muhtemel neden: Yanlış root/alias veya eksik dosya.
Anlamı: Eşleşen dosya veya fallback bulunamadı.
Muhtemel neden: try_files, location, server_name veya uygulama route yapılandırması.
Anlamı: FastCGI script yolu mevcut PHP dosyasına karşılık gelmiyor.
Muhtemel neden: SCRIPT_FILENAME, root veya alias uyumsuz.
Anlamı: PHP-FPM script dosyasını bulamadı.
Muhtemel neden: NGINX ile PHP-FPM chroot/path farkı.
Anlamı: Fallback aynı URI’yi tekrar tekrar işliyor.
Muhtemel neden: Yanlış try_files veya error_page hedefi.
Anlamı: Güzel bağlantılar index.php front-controller’a ulaşmıyor.
Muhtemel neden: Eksik try_files $uri $uri/ /index.php?$args.
Anlamı: Client-side route doğrudan sunucuda dosya olarak aranıyor.
Muhtemel neden: SPA index.html fallback eksik.
Anlamı: İstek public/index.php’ye yönlenmiyor.
Muhtemel neden: Document root proje/public değil veya try_files eksik.
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.
nginx -T | grep -nE 'server_name|listen |root |alias |location |try_files|fastcgi_param SCRIPT_FILENAME'
İsteğin yol eşlemesini etkileyen tüm yönergeleri gösterir.
realpath /var/www/example
find /var/www/example -maxdepth 2 -type f | head -n 50
Deploy dizini ve beklenen giriş dosyalarını doğrular.
curl -sI -H 'Host: example.com' http://127.0.0.1/urun/42
curl -skI https://example.com/urun/42
Doğru server_name ile varsayılan vhost farkını gösterir.
grep ' 404 ' /var/log/nginx/access.log | tail -n 50
tail -n 100 /var/log/nginx/error.log
404 URL’leri ve hesaplanan dosya yollarını karşılaştırır.
curl -skI https://example.com/
curl -skI https://example.com/olmayan-dosya.css
curl -skI https://example.com/uygulama-route
Front-controller ve gerçek 404 davranışını ayrı test eder.
nginx -t && systemctl reload nginx
Yeni route yapılandırmasını güvenli 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 404 Not Found ve try_files için systemd, paket yolu ve journald kontrolleri.
nginx -T | grep -nE 'server_name|root |alias |try_files'
tail -n 100 /var/log/nginx/error.logNGINX 404 Not Found ve try_files için SELinux, PHP-FPM pool ve RHEL tabanlı servis kontrolleri.
nginx -T | grep -nE 'server_name|root |alias |try_files'
ls -Zd /var/www/example 2>/dev/nullPlesk tarafından üretilen NGINX sanal host dosyalarında nginx 404 not found ve try_files kontrolü.
grep -R 'try_files\|root ' /var/www/vhosts/system/example.com/conf 2>/dev/null
plesk repair web example.com -nÖnce doğru sanal hostu, sonra fiziksel yolu ve son olarak uygulama fallback’ini doğrulayın.
İsteğin doğru server_name bloğuna düştüğünü kontrol edin.
curl -sI -H 'Host: example.com' http://127.0.0.1/open() satırındaki yol gerçek deploy diziniyle karşılaştırılmalıdır.
tail -n 100 /var/log/nginx/error.logLocation URI’sinin dosya yoluna nasıl çevrildiğini doğrulayın.
nginx -T | grep -nE 'location |root |alias 'WordPress/Laravel route’ları uygun index dosyasına fallback etmelidir.
nginx -T | grep -n 'try_files'Fallback’in gerçek olmayan assetleri 200 göstermediğini doğrulayın.
for p in / /api/health /olmayan.css /uygulama-route; do curl -sk -o /dev/null -w "$p %{http_code}\n" https://example.com$p; doneSözdizimi sonrası cache/CDN katmanını da temizleyip doğrulayın.
nginx -t && systemctl reload nginxlocation / içinde index.php front-controller fallback’i gerekir.
nginx -T | grep -n 'try_files'Document root proje kökü değil public dizini olmalıdır.
nginx -T | grep -n 'root '; test -f /var/www/proje/public/index.php && echo OKClient route için index.html fallback gerekir; API hariç tutulmalıdır.
curl -skI https://example.com/panel/ayarlarAlias, case sensitivity, deploy yolu ve build output kontrol edilir.
find /var/www/example -iname 'dosya.css'server_name eşleşmesi ve default_server sırası incelenir.
nginx -T | grep -nE 'listen .*default_server|server_name'Web yapılandırması ve document root domain bazında yeniden üretilir.
plesk repair web example.com -yFront-controller uygulamalarında location / içindeki try_files fallback’i eksik veya yanlıştır.
Belirtilen dosya ve dizinleri sırayla kontrol eder; bulunamazsa son parametredeki URI’ye iç yönlendirme veya hata kodu uygular.
root istek URI’sini verilen yola ekler; alias eşleşen location yolunu farklı bir fiziksel yolla değiştirir.
Genellikle location / içinde try_files $uri $uri/ /index.php?$args yaklaşımı kullanılır; mevcut yapı ve güvenlik kurallarına göre uyarlanmalıdır.
Document root Laravel projesinin public dizini olmalı ve bulunmayan route’lar public/index.php’ye yönlenmelidir.
Tarayıcı client-side route’u doğrudan istediğinde NGINX gerçek dosya arar. SPA için kontrollü index.html fallback gerekir.
İstek başka veya varsayılan server bloğuna düşerek yanlış root üzerinden 404 ya da farklı site gösterebilir.
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.