Nginx + PHP (sur fastCGI) fonctionne très bien pour moi. Lorsque j'entre un chemin vers un PHP qui n'existe pas, au lieu d'obtenir la page d'erreur 404 par défaut (qui vient pour tout fichier .html invalide), j'obtiens simplement un "Aucune entrée fichier spécifié. ".
Comment personnaliser cette page d'erreur 404?
Vous utilisez la propriété error_page dans le nginx config .
Par exemple, si vous avez l'intention de définir la page d'erreur 404 sur /404.html
, utilisation
error_page 404 /404.html;
Définition de la page d'erreur 500 sur /500.html
est aussi simple que:
error_page 500 /500.html;
Vous pouvez configurer une page d'erreur personnalisée pour chaque bloc d'emplacement dans votre nginx.conf, ou une page d'erreur globale pour le site dans son ensemble.
Pour rediriger vers une simple page 404 introuvable pour un emplacement spécifique:
location /my_blog {
error_page 404 /blog_article_not_found.html;
}
Une page 404 à l'échelle du site:
server {
listen 80;
error_page 404 /website_page_not_found.html;
...
Vous pouvez ajouter des codes d'erreur standard ensemble pour avoir une seule page pour plusieurs types d'erreurs:
location /my_blog {
error_page 500 502 503 504 /server_error.html
}
Pour rediriger vers un serveur totalement différent, en supposant que vous disposiez d'un serveur en amont nommé server2 défini dans votre section http:
upstream server2 {
server 10.0.0.1:80;
}
server {
location /my_blog {
error_page 404 @try_server2;
}
location @try_server2 {
proxy_pass http://server2;
}
Le manuel peut vous donner plus de détails, ou vous pouvez rechercher sur Google les termes nginx.conf et error_page pour des exemples concrets sur le Web.
Soyez prudent avec la syntaxe! Great Turtle les a utilisés de manière interchangeable, mais:
error_page 404 = /404.html;
Renvoie la page 404.html avec un code d'état de 200 (car = a relayé cela sur cette page)
error_page 404 /404.html;
Renvoie la page 404.html avec un code d'erreur 404 (d'origine).
https://serverfault.com/questions/295789/nginx-return-correct-headers-with-custom-error-documents
Le paramètre "error_page" fait une redirection, convertissant la méthode de demande en "GET", ce n'est pas une page de réponse personnalisée.
La solution la plus simple est
server{
root /var/www/html;
location ~ \.php {
if (!-f $document_root/$fastcgi_script_name){
return 404;
}
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params.default;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
Soit dit en passant, si vous souhaitez que Nginx traite l'état 404 renvoyé par les scripts PHP, vous devez ajouter
[fastcgi_intercept_errors][1] on;
Par exemple.
location ~ \.php {
#...
error_page 404 404.html;
fastcgi_intercept_errors on;
}
Ces réponses ne sont plus recommandées car try_files
fonctionne plus rapidement que if
dans ce contexte. Ajoutez simplement try_files
dans votre bloc d'emplacement php pour tester si le fichier existe, sinon retournez un 404.
location ~ \.php {
try_files $uri =404;
...
}