Nginx error_page自定义错误页面设置过程

 更新时间:2023年08月10日 13:45:36   作者:jc0803kevin  
这篇文章主要介绍了Nginx error_page自定义错误页面设置过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Nginx error_page自定义错误页面设置

#fastcgi_intercept_errors on;
    #语法:fastcgi_intercept_errors on|off 
    #默认值:fastcgi_intercept_errors off 
    #使用字段:http, server, location 
    #这个指令指定是否传递4xx和5xx错误信息到客户端,或者允许nginx使用error_page处理错误信息。
    #你必须明确的在error_page中指定处理方法使这个参数有效,正如Igor所说“如果没有适当的处理方法,
    #nginx不会拦截一个错误,这个错误不会显示自己的默认页面,这里允许通过某些方法拦截错误。


    #proxy_intercept_errors 为on 表示 nginx按照原response
    #proxy_intercept_errors on|off 
    #proxy_intercept_errors off 
    #使用字段:http, server, location    #code输出,后端是404,就是404.这个变量开启后,我们才能自定义错误页面。


    proxy_intercept_errors on;

    upstream dev1 {

        server 127.0.0.1:8080;          #HessianTest3

    }

    server {
        listen       80;
        server_name  kevin.com;



        location / {
            proxy_pass http://dev1;     #HessianTest3
        }

        #参考书本第40页
        #error_page 404 =200 /404.html;
        #error_page 500 502 503 504  =200 /50x.html;

        #location = /404.html {
        #   root html;
        #   
        #}

        #location = /50x.html {
        #    root   html;
        #}

        #当页面发生异常的时候可以指定跳转到location中,也可以指定跳转到指定的URL地址上面
        error_page 404 http://www.baidu.com/;
    }

Nginx error_page 使用

接触到了error_page ,这里记录一下

1. error_page语法

语法:

error_page code [ code... ] [ = | =answer-code ] uri | @named_location

默认值:

no 

使用字段:

http, server, location, location 中的if字段 

2. 实例

nginx指令error_page的作用是当发生错误的时候能够显示一个预定义的uri,比如:

error_page 502 503 /50x.html;
location = /50x.html {
    root /usr/share/nginx/html;
}  

这样实际上产生了一个内部跳转(internal redirect),当访问出现502、503的时候就能返回50x.html中的内容,这里需要注意是否可以找到50x.html页面,所以加了个location保证找到你自定义的50x页面。

同时我们也可以自己定义这种情况下的返回状态吗,比如:

error_page 502 503 =200 /50x.html;
location = /50x.html {
    root /usr/share/nginx/html;
}   

这样用户访问产生502 、503的时候给用户的返回状态是200,内容是50x.html。

当error_page后面跟的不是一个静态的内容的话,比如是由proxyed server或者FastCGI/uwsgi/SCGI server处理的话,server返回的状态(200, 302, 401 或者 404)也能返回给用户。

error_page 404 = /404.php;
location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}   

也可以设置一个named location,然后在里边做对应的处理。

error_page 500 502 503 504 @jump_to_error;
location @jump_to_error {    
    proxy_pass http://backend;
}

同时也能够通过使客户端进行302、301等重定向的方式处理错误页面,默认状态码为302。

error_page 403      http://example.com/forbidden.html;
error_page 404 =301 http://example.com/notfound.html;

同时error_page在一次请求中只能响应一次,对应的nginx有另外一个配置可以控制这个选项:recursive_error_pages

默认为false,作用是控制error_page能否在一次请求中触发多次。

3. Nginx 自定义404错误页面配置中有无等号的区别

  • error_page 404 /404.html 可显示自定义404页面内容,正常返回404状态码。
  • error_page 404 = /404.html 可显示自定义404页面内容,但返回200状态码。
  • error_page 404 /404.php 如果是动态404错误页面,包含 header 代码(例如301跳转),将无法正常执行。正常返回404代码。
  • error_page 404 = /404.php 如果是动态404错误页面,包含 header 代码(例如301跳转),加等号配置可以正常执行,返回php中定义的状态码。但如果php中定义返回404状态码,404状态码可以正常返回,但无法显示自定义页面内容(出现系统默认404页面),这种情况可以考虑用410代码替代( header("HTTP/1.1 410 Gone"); 正常返回410状态码,且可正常显示自定义内容)。

例子

server  {
    listen 80;
    server_name  test.com;
    index       index.html index.htm;
 
    location / { 
        proxy_pass http://online;
        error_page 404 = @fallback;
        proxy_intercept_errors on;
    }
    location @fallback {
        proxy_pass http://backend;
    }
}
 
upstream online {
         server 192.168.88.18:80;
         server 192.168.88.28:80;
}
 
upstream backend {
         server 192.168.88.38:80;
}

例子

由于在nginx配置中,设置了limit_req的流量限制,导致许多请求返回503错误代码,在限流的条件下,为提高用户体验,希望返回正常Code 200,且返回操作频繁的信息:

location  /test {
  ... 
  limit_req zone=zone_ip_rm burst=1 nodelay; 
  error_page 503 =200 /dealwith_503?callback=$arg_callback;
}
location /dealwith_503{ 
  set $ret_body '{"code": "V00006","msg": "操作太频繁了,请坐下来喝杯茶。"}';
   if ( $arg_callback != "" ) 
   { 
       return 200 'try{$arg_callback($ret_body)}catch(e){}'; 
   } 
   return 200 $ret_body; 
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • linux下安装Nginx1.16.0的教程详解

    linux下安装Nginx1.16.0的教程详解

    因为最近在倒腾linux,想安装新版本的nginx,找了一圈教程没有找到对应的教程,在稍微倒腾了一会之后终于成功的安装了最新版。这篇文章主要介绍了linux下安装Nginx1.16.0 ,需要的朋友可以参考下
    2019-06-06
  • nginx之从main函数开始了解配置文件处理及配置信息的读入过程

    nginx之从main函数开始了解配置文件处理及配置信息的读入过程

    这篇文章主要介绍了nginx之从main函数开始了解配置文件处理及配置信息的读入过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-07-07
  • Nginx实现动态封禁IP的步骤指南

    Nginx实现动态封禁IP的步骤指南

    在日常的生产环境中,网站可能会遭遇恶意请求、DDoS 攻击或其他有害的访问行为,为了应对这些情况,动态封禁 IP 是一项十分重要的安全策略,本篇博客将介绍如何通过 NGINX 实现动态封禁 IP,从配置到自动化的实现步骤,需要的朋友可以参考下
    2025-02-02
  • 详解Prometheus 抓取 nginx 访问日志的指标

    详解Prometheus 抓取 nginx 访问日志的指标

    通过结合NGINX Exporter, Fluentd, Prometheus和Grafana, 可有效监控并可视化NGINX中的4xx和5xx状态码日志,首先使用Fluentd收集和解析NGINX日志,再通过Prometheus抓取Fluentd暴露的指标,本文介绍Prometheus抓取nginx访问日志的指标,感兴趣的朋友一起看看吧
    2024-10-10
  • Nginx安装配置naxsi waf防火墙的方法实现

    Nginx安装配置naxsi waf防火墙的方法实现

    Naxsi是第三方nginx模块,它也能有效防御,本文主要介绍了Nginx安装配置naxsi waf防火墙的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • nginx代理后端路径获取IP为127.0.0.1问题

    nginx代理后端路径获取IP为127.0.0.1问题

    文章讨论了在使用Nginx作为反向代理时,如何正确配置以避免在前端路径A/api访问后端时丢失真实的IP地址,通过有效的Nginx配置,可以确保在前后端分离的场景中,客户端通过前端路径访问后端时,后端能够正确获取客户端的真实IP地址,示例配置展示了如何实现这一目标
    2025-02-02
  • nginx中的location路径配置(实路径和虚路径)

    nginx中的location路径配置(实路径和虚路径)

    这篇文章主要介绍了nginx中的location路径配置(实路径和虚路径),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • 基于nginx实现上游服务器动态自动上下线无需reload的实现方法

    基于nginx实现上游服务器动态自动上下线无需reload的实现方法

    这篇文章主要介绍了基于nginx实现上游服务器动态自动上下线无需reload,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • keepalived结合nginx实现nginx高可用的方法

    keepalived结合nginx实现nginx高可用的方法

    这篇文章主要介绍了keepalived结合nginx实现nginx高可用的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • windows下快速安装nginx并配置开机自启动的方法

    windows下快速安装nginx并配置开机自启动的方法

    这篇文章主要介绍了windows下快速安装nginx 并配置开机自启动的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05

最新评论