专栏首页运维录如何为Nginx设置404页面?

如何为Nginx设置404页面?

开始之前

这篇文章发布于2013年,介绍如何为nginx设置一个404页面,当客户端试图访问一个并不存在的资源时,nginx会返回代码为404的错误信息"404 Not Found",这个错误信息非常简陋并且不是很友好,建议根据实际需求设置一个专用的404错误页面(如果没有要求可以使用下面的“腾讯公益宝贝回家”404页面,也许一个微不足道的举动,却已帮助了别人。两全其美哈)。

操作步骤

1. 准备一个 404 HTML文档文档内容随意。

例如将HTML文档内容设置为“腾讯公益宝贝回家”,404将会返回失踪儿童信息。

cat 404.html

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

2. 配置 error_page

在 server字段加入 error_page 404 = /404.html; 例如:

server
{

    listen      80;
    server_name zongming.net;
    #... 其它配置项省略
    error_page 404 /404.html;

}

3. 重启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服务器


需要注意的是,对于FastCGI上游服务器来说它会返回自己的错误信息,如图中的php-fpm会抛出"File not found."。

如果你希望它们使用相同的404错误页面,那么你需要指定 fastcgi_intercept_errors 指令。

1. 配置 fastcgi_intercept_errors 指令为"on" 。

grep 'intercept' /etc/nginx/nginx.conf
  fastcgi_intercept_errors on;

2. 不要忘记重启nginx

nginx -t && nginx reload

3. 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指令使用。

参考

nginx error_page指令 http://zongming.net/read-347

本文分享自微信公众号 - 运维录(gh_70d95b8f5f7c),作者:东南

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何删除无效的<none>Docker镜像?

    为什么会有 <none> 这样命名的镜像?这些镜像 docker 称为 虚悬镜像,当镜像被新的镜像覆盖时候,老版本镜像名称会变成 <none> 。

    用户1560186
  • Nginx Porxy反向代理

    我这里有个例子,早期的WEB服务器使用的是HTTP/1.0协议,是不支持keep-alive功能的,为了解决这个问题当时主流的解决方案是使用nginx做反向代理...

    用户1560186
  • 为什么Docker镜像大小与仓库中不一致?

    如果仔细观察你会发现,Docker宿主机中某个镜像所占用的磁盘空间和在 Docker Hub(仓库)上看到的镜像大小是不同的,例如 golang:1.9 在 D...

    用户1560186
  • 东哥陪你学DAX——Treatas

    相信大家都遇到过下图这种情况,两表之间拉扯半天,虚线就是没法变成实线,表关联就是这么倔,不给面子

    公众号PowerBI大师
  • RESTful架构REST名称REST的出处RESTful API各端的具体实现

    JavaEdge
  • 2018年8月10日对飞机大战的思考和将python源文件打包成exe可执行文件

    今天遇到的新单词: script n脚本 terminate vi结束 ***************************** 将Python文...

    武军超
  • 原 CentOS(亚马逊EC2,亚马逊班)

    霡霂
  • mysql学习总结02 — 数据类型

    无符号:表示存储的数据在当前字段中,没有负数(只有正数,例如 tinyint 区间为 0~255)

    CS逍遥剑仙
  • WPF效果第一百一十八篇之Slider

    在前面一篇效果中(WPF效果第一百一十七篇之Slider)分享了Slider简单的效果;这不突发奇想:是不是能来类似环形的Slider的效果;初次尝试修改Sli...

    WPF程序员
  • CanalSharp.AspNetCore v0.0.4-支持输出到MongoDB

      CanalSharp.AspNetCore是一个基于CanalSharp的适用于ASP.NET Core的一个后台任务组件,它可以随着ASP.NET Cor...

    Edison Zhou

扫码关注云+社区

领取腾讯云代金券