Când vizitez o adresă URL inexistentă cu extensia .php, primesc o pagină de eroare ngnix 404, totuși adresa URL fără extensia .php funcționează conform așteptărilor folosind try_files. Unde 404 este gestionat prin aplicația php.
S-a întâmplat de când am adăugat acest cod ca sugerat
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
dacă (!-f $document_root$fastcgi_script_name) {
întoarce 404;
}
Motivul pentru adăugarea acestui lucru a fost pentru a remedia eroarea din jurnale: FastCGI trimis în stderr: „Scriptul principal necunoscut” în timp ce citiți antetul răspunsului din amonte
Această eroare se întâmpla când am vizitat fișierul non-existent.php. Am citit o mulțime de postări despre problema care are legătură cu lipsa „SCRIPT_FILENAME”, dar nu a fost cazul pentru mine.
exemplu.conf
Server {
asculta 443 ssl;
asculta [::]:443 ssl;
nume_server example.com;
root /var/www/example/public/public;
access_log /var/log/nginx/example.access.log main_ext;
error_log /var/log/nginx/example.error.log warn;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/nginx/include.d/ssl.conf;
# Laravel
rescrie ^/index.php/(.*) /$1 permanent;
locație = / {
try_files /page-cache/pc__index__pc.html /index.php?$query_string;
}
Locație / {
try_files $uri $uri/ /page-cache/$uri.html /index.php?$query_string;
}
locație ~ [^/]\.php(/|$) {
include /etc/nginx/include.d/php.conf;
fastcgi_pass unix:/var/run/php/php8.0-fpm-example.sock;
}
}
php.conf
# Verificați dacă fișierul există
try_files $uri =404;
# https://www.nginx.com/nginx-wiki/build/dirhtml/start/topics/examples/phpfcgi/
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
dacă (!-f $document_root$fastcgi_script_name) {
întoarce 404;
}
fastcgi_index index.php;
# Reduceți vulnerabilitățile https://httpoxy.org/
fastcgi_param HTTP_PROXY "";
fastcgi_intercept_errors dezactivat;
# includeți setarea fastcgi_param
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Exemplu de URL:
https://example.com/foo - Funcționează bine arată destul de 404 în aplicația php.
https://example.com/foo.php - Afișează ngnix 404 implicit.