如何为Nginx设置404页面?
2013-05-30 by dongnan
开始之前
这篇文章发布于2013年,介绍如何为nginx
设置一个404页面,当用户试图访问一个并不存在的资源时,nginx会返回代码为404的错误信息 404 Not Found。
这个错误信息非常简陋不是很友好,建议根据实际需求设置一个专用的404
错误页面(如果没有要求可以使用下面的“腾讯公益宝贝回家”404页面,两全其美哈)。
操作步骤
准备404文档
文档内容随意,例如将HTML文档内容设置为“腾讯公益宝贝回家”,404
将会返回失踪儿童信息:
<html>
<head>
<title>404您访问的页面找不存在</title>
</head>
<body>
<script type="text/javascript" src="http://www.qq.com/404/search_children.js" charset="utf-8"></script>
</body>
</html>
配置 error_page
在 server
字段加入 error_page 404 = /404.html;
例如:
server
{
listen 80;
server_name zongming.net;
#... 其它配置项省略
error_page 404 /404.html;
}
重启nginx服务
nginx -t && nginx reload
FastCGI服务器
需要注意的是,对于FastCGI上游服务器来说它会返回自己的错误信息,php-fpm
会抛出File not found
:
如果你希望它们使用相同的404
错误页面,那么你需要指定 fastcgi_intercept_errors
指令。
# 配置 `fastcgi_intercept_errors` 指令为`on`
grep 'intercept' /etc/nginx/nginx.conf
fastcgi_intercept_errors on;
同样不要忘记重启nginx
nginx -t && nginx reload
帮助
error_page 指令
语法: error_page code [ code… ] [ = | =answer-code ] uri | @named_location
默认值: no
使用字段: http, server, location, location 中的if字段
功能: 这个参数可以为错误代码指定相应的错误页面。
更多示例:
error_page 404 /404.html;
error_page 502 503 504 /50x.html;
error_page 403 http://example.com/forbidden.html;
error_page 404 = @fetch;
也可以将原有的响应代码修改为另一个响应代码:
error_page 404 =200 /empty.gif;
error_page 404 =403 /forbidden.gif;
另外还可以使用等号(=)指定你自己编写的错误处理程序返回相应的响应代码:
error_page 404 = /404.php;
如果在重定向时不需要改变URI
,可以将错误页面重定向到一个命名的location字段中:
location / (
error_page 404 @fallback;
)
location @fallback (
proxy_pass http://backend;
)
fastcgi_intercept_errors 指令
语法: fastcgi_intercept_errors on|off
默认值: fastcgi_intercept_errors off
使用字段: http, server, location
功能: 这个指令指定是否传递4xx和5xx错误信息到客户端,或者允许nginx使用error_page处理错误信息。
小结
最后来总结下文章中的知识点:
- 使用 error_page指令为nginx 指定404错误页面。
- 对于 php-fpm等上游服务器,需要搭配 fastcgi_intercept_errors指令使用。