Puncte:0

Extensie nginx 404 .php cu fpm

drapel eg

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.

vautee avatar
drapel kr
Ați putea adăuga aceste exemple de adrese URL care funcționează/nu vor funcționa la întrebarea dvs.?
drapel eg
Sigur le-am adăugat pe acestea.
Puncte:1
drapel gr

Dacă doriți ca acele URI să fie procesate ca orice alte URI inexistente, modificați try_files $uri =404; la try_files $uri /index.php?$query_string; în dumneavoastră php.conf fişier.


Dacă aplicația dvs. PHP folosește cu adevărat PATH_INFO Variabila FastCGI (de care mă îndoiesc), ar trebui să o utilizați

fastcgi_split_path_info ^(.+\.php)(/.+)$;

try_files $fastcgi_script_name /index.php?$query_string;

setați $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;

(vedea acest bilet nginx trac).

drapel eg
Trebuia să elimin instrucțiunea if pentru a returna 404, dar nu mai era nevoie de fapt. Dar asta are sens acum noroc.
Ivan Shatsky avatar
drapel gr
Aveam să menționez că „dacă { ... }” nu mai este necesar în timp ce scrii răspunsul, dar uită de el. Oricum ti-ai dat seama singur :)

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.