主要是记录踩过的一个坑。。。

nginx要自定义404和401的页面,但是error_page 配置没有生效,没有正常跳转。

error_page 404  /404.html;

error_page 404 = http://www.test.com/error.html;

http://tengine.taobao.org/nginx_docs/cn/docs/http/ngx_http_core_module.html#error_page

这是因为我们的404静态资源在上游服务器上,而不是当前nginx直接提供

nginx proxy 启用自定义错误页面:

语法:proxy_intercept_errors on | off;

默认值:

proxy_intercept_errors off;

上下文:http, server, location

当被代理的后端服务器的响应状态码大于等于300时,决定是否直接将响应发送给客户端,亦或将响应转发给nginx由error_page指令来处理。

proxy_intercept_errors 为on 表示 nginx按照原response code 输出,后端是404就是404。这个变量开启后,我们才能自定义错误页面。

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_intercept_errors

总结几种404 自定义页面的配置:

第一种:Nginx自己的错误页面

看下面的配置,这种情况下不需要修改任何参数,就能实现这个功能。

server {

listen      80;

server_name  www.test.com;

root   /data/wwwroot/test;

index  index.html index.htm;

location / {

}

# 定义错误页面码,如果出现相应的错误页面码,转发到那里。

error_page  404 403 500 502 503 504  /404.html;

# 承接上面的location。

location = /404.html {

# 放错误页面的目录路径。当然默认可以在网站目录下,也可以定义放置错误页面的位置。

root   /usr/share/nginx/html;

}

}

第二种:反向代理的错误页面

如果后台静态资源处理报错抛出404,想把这个状态叫Nginx反馈给客户端或者重定向到某个连接,配置如下:

upstream www {

server 192.168.1.88:80  weight=20 max_fails=2 fail_timeout=30s;

}

server {

listen       80;

server_name www.test.com;

root   /data/wwwroot/test;

index  index.html index.htm;

location / {

if ($request_uri ~* '^/$') {

rewrite .*   http://www.test.com/index.html redirect;

}

# 关键参数:这个变量开启后,我们才能自定义错误页面,当后端返回404,nginx拦截错误定义错误页面

proxy_intercept_errors on;

proxy_pass      http://www;

proxy_set_header HOST   $host;

proxy_set_header X-Real-IP      $remote_addr;

proxy_set_header X-Forwarded-FOR $proxy_add_x_forwarded_for;

}

error_page    404  /404.html;

location = /404.html {

root   /usr/share/nginx/html;

}

}

第三种:Nginx解析php代码的错误页面

如果后端是php解析的,需要加一个变量

在http段中加一个变量 fastcgi_intercept_errors on 就可以了。

指定一个错误页面:

error_page    404  /404.html;

location = /404.html {

root   /usr/share/nginx/html;

}

注意事项:

1.必须要添加:fastcgi_intercept_errors on; 如果这个选项没有设置,即使创建了404.html和配置了error_page也没有效果。

fastcgi_intercept_errors 语法:

fastcgi_intercept_errors on|off

默认: fastcgi_intercept_errors off

当FastCGI后端服务器响应状态码大于等于300时,决定是否直接将响应发送给后端客户端,或者将响应转发给nginx由 error_page指令来处理。

http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_intercept_errors

fastcgi_intercept_errors on表示接收fastcgi输出的http 1.0 response code,后端php可以输出header指示nginx输出什么错误页面。开启这个之后,我们才能在php里面自定义错误代码和页面。

添加位置: http, server, location

默认情况下,nginx不支持自定义404错误页面,只有这个指令被设置为on,nginx才支持将404错误重定向。

这里需要注意的是,并不是说设置了on,nginx就会将404错误重定向。

在nginx中404错误重定向生效的前提是设置了fastcgi_intercept_errors on,并且正确的设置了error_page这个选项(包括语法和对应的404页面)

2.不要出于省事或者提高首页权重的目的将首页指定为404错误页面,也不要用其它方法跳转到首页。

3.自定义的404页面必须大于512字节,否则可能会出现IE默认的404页面。例如,假设自定义了404.html,大小只有11个字节(内容为:404错误)。

转载于:https://www.cnblogs.com/centos-python/articles/10290445.html

Nginx 自定义404 页面相关推荐

  1. Linux配置nginx打开报404,Linux下Nginx配置404页面的方法

    Linux下Nginx配置404页面很多设置后返回状态码是200,而不是404状态码,所以那样的404页面设置是不正确的,今天分享下Linux下Nginx配置404页面设置方法. 1.创建自己的404 ...

  2. html页面在ie上出现404怎么解决,如何解决自定义404页面在IE等浏览器中无法显示问题...

    网站设置自定义404页面之后(如何在IIS下正确设置404页面?),如无法在浏览器中正常显示,可能是以下原因: 1.404页面文件权限设置错误 我们需要为404页面文件添加上用户everyone的可读 ...

  3. 怎么自定义服务器的404,如何自定义404页面

    404错误页面是WWW网站访问比较经常出现的错误.大家最熟悉的也是最常见的出错提示:404 not found.404页面就是当用户输入了错误的链接时,返回的页面.而默认的404错误页面呆板麻木,让访 ...

  4. 自定义404页面并打包docker部署项目

    前言 最近看了docker的用法,对于容器的理解感觉还行,当是自我感觉总是不靠谱的.所以现在就来使用docker容器实际部署一下项目,检验自己对于知识的掌握. SpringBoot项目和docker的 ...

  5. 【Laravel】自定义404页面

    前言: 查看了一些网上的方法,很多都是使用自定义异常类来处理自定义404页面,我只是想用 Laravel8自带异常类来进行处理,所以记录一下自己的方法. 方法: 文件: app\Exceptions\ ...

  6. 给你的Zeit page自定义404页面

    本文章最初发表在XJHui's Blog,未经允许,任何人禁止转载! 为使您获得最好的阅读体验,强烈建议您点击 这里 前往 XJHui's Blog 查看! 前言 本教程仅适用于部署在Zeit.co的 ...

  7. nginx自定义404错误页面

    在Nginx环境下配置自定义的404错误页面转向,避免给用户展示生硬.不友好的错误信息.可以给出如下提示:很抱歉,您访问的页面不存在或已被删除. 注意事项: 一.修改nginx.conf之前做好备份, ...

  8. php nginx配置404页面,Nginx实现404页面的几种方法

    upstream www { server 192.168.1.201:7777  weight=20 max_fails=2 fail_timeout=30s; ip_hash; } server ...

  9. Nginx实现404页面的几种方法

    一个网站项目,肯定是避免不了404页面的,通常使用Nginx作为Web服务器时,有以下集中配置方式,一起来看看. 第一种:Nginx自己的错误页面 Nginx访问一个静态的html 页面,当这个页面没 ...

  10. Magento如何自定义404页面?

    Magento修改404页面 Magento有默认的404页面,如果想自定义一个404页面,又该如何做呢? 方法一 首先,先来看下默认的404页面: 1.Magento的CMS部分,可以通过定义它来改 ...

最新文章

  1. HDU2121(最小树形图的模版算法题)
  2. 自制清理电脑里的垃圾软件
  3. 基于Hadoop生态系统的一种高性能数据存储格式CarbonData(性能篇)
  4. BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+数论分块)
  5. springSecurity源码分析-springSecurityFilterChain
  6. 用php求n个分数的和,php关于数组n个随机数分成x组,使每组值相近的算法
  7. caffe 关于Deconvolution的初始化注意事项
  8. 第一章练习题三级菜单
  9. 一些简单的shell脚本实例
  10. 使用SaltStack安装JBoss
  11. 吞食天地2完全版乱码怎么解决_PDF转Word如何转换?PDF转Word乱码怎么解决?
  12. KingbaseES——人大金仓数据库安装教程
  13. OpenCV常用库函数
  14. Struts2快速入门,超简单详细的快速入门教程
  15. 教你如何挑选趁手的笔记本电脑!
  16. Windows7保护眼睛颜色设置方法
  17. 切比雪夫阻抗变换器设计与仿真
  18. android第三方apk找不到/system/lib64/里面的系统库
  19. 高并发下的幂等策略分析
  20. lammps教程:lj/cut力场使用方法

热门文章

  1. eclipse 中System.out快捷键设定
  2. 好用的文件对比工具Beyond Compare 4 for Mac 4.4.2
  3. Mac废纸篓无法清空怎么办?
  4. AweEraser for Mac如何永久删除笔记本电脑上的数据?
  5. Installation of Requests
  6. TimescaleDB 简单试用
  7. shelve模块使用说明
  8. Web***系列教程之跨站脚本***和防范技巧详解
  9. WINDOWS资源编译器出错信息
  10. Cisco无线AP在复杂企业环境配置指南