Nginx - Personnalisation de la page 404
-
06-07-2019 - |
Question
Nginx + PHP (sur fastCGI) fonctionne très bien pour moi. Lorsque j'entre un chemin d'accès à un fichier PHP qui n'existe pas, au lieu d'obtenir la page d'erreur 404 par défaut (qui s'applique à tout fichier .html non valide), j'obtiens simplement un message "Aucun fichier d'entrée spécifié.".
Comment personnaliser cette page d'erreur 404?
La solution
Vous utilisez la propriété error_page dans nginx config .
Par exemple, si vous souhaitez définir la page d'erreur 404 sur /404.html
, utilisez
error_page 404 /404.html;
Le réglage de la page d'erreur 500 sur /500.html
est aussi simple que:
error_page 500 /500.html;
Autres conseils
Vous pouvez configurer une page d'erreur personnalisée pour chaque bloc d'emplacement de votre nginx.conf ou une page d'erreur globale pour le site dans son ensemble.
Pour rediriger vers une simple page 404 non trouvée pour un emplacement spécifique:
location /my_blog {
error_page 404 /blog_article_not_found.html;
}
Une page de l'ensemble du site 404:
server {
listen 80;
error_page 404 /website_page_not_found.html;
...
Vous pouvez associer des codes d'erreur standard pour créer une seule page pour plusieurs types d'erreur:
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 effectuer une recherche. google pour les termes nginx.conf et error_page pour des exemples concrets sur le Web.
Faites attention à la syntaxe! Great Turtle les utilisait de manière interchangeable, mais:
error_page 404 = /404.html;
Renverra la page 404.html avec un code d'état de 200 (car = l'a relayé sur cette page)
error_page 404 /404.html;
Renverra la page 404.html avec un code d'erreur 404 (d'origine).
La " error_page " Ce paramètre effectue une redirection en convertissant la méthode de requête 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;
}
Au fait, si vous souhaitez que Nginx traite l'état 404 renvoyé par les scripts PHP, vous devez ajouter
. [fastcgi_intercept_errors] [1] on;
ex.
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 vérifier si le fichier existe, sinon retournez un 404.
location ~ \.php {
try_files $uri =404;
...
}