Nginx – 自定义404页面

Nginx + PHP(在fastCGI上)非常适合我。 当我input一个不存在的PHP文件的path,而不是获得默认的404错误页面(对于任何无效的.html文件),我只是得到一个“没有指定input文件”。

我怎样才能定制这个404错误页面?

您在nginx configuration中使用error_page属性。

例如,如果您打算将404错误页面设置为/404.html ,请使用

 error_page 404 /404.html; 

将500错误页面设置为/500.html就像下面这样简单:

 error_page 500 /500.html; 

您可以为nginx.conf中的每个位置块设置一个自定义错误页面,或为整个站点设置一个全局错误页面。

redirect到一个简单的404找不到特定位置的页面:

 location /my_blog { error_page 404 /blog_article_not_found.html; } 

全站404页面:

 server { listen 80; error_page 404 /website_page_not_found.html; ... 

您可以将标准的错误代码附加在一起,以为单个页面提供几种types的错误:

 location /my_blog { error_page 500 502 503 504 /server_error.html } 

要redirect到一个完全不同的服务器,假设你在http部分定义了一个名为server2的上游服务器:

 upstream server2 { server 10.0.0.1:80; } server { location /my_blog { error_page 404 @try_server2; } location @try_server2 { proxy_pass http://server2; } 

该手册可以给你更多的细节,或者你可以在网上search谷歌的nginx.conf和error_page的真实生活的例子。

“error_page”参数是不够的。

最简单的解决scheme是

 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; } 

顺便说一下,如果你想让Nginx处理由PHP脚本返回的404状态,你需要添加

fastcgi_intercept_errors on;

例如

 location ~ \.php { #... error_page 404 404.html; fastcgi_intercept_errors on; } 

小心语法! 大乌龟交替使用它们,但是:

error_page 404 = /404.html;

将返回状态代码为200的404.html页面(因为=已将该页面中继到此页面)

error_page 404 /404.html;

将返回(原始的)404错误代码的404.html页面。

https://serverfault.com/questions/295789/nginx-return-correct-headers-with-custom-error-documents

这些答案不再被推荐,因为try_files工作得比在这种情况下更快。 只需添加try_files在您的PHP位置块来testing文件是否存在,否则返回404。

 location ~ \.php { try_files $uri =404; ... }