博客
关于我
结合nginx源码学习error_page和proxy 指令的关系
阅读量:205 次
发布时间:2019-02-28

本文共 1881 字,大约阅读时间需要 6 分钟。

Nginx代理上游服务器错误处理配置详解

Nginx作为高性能的反向代理服务器,在处理上游服务器返回的错误响应时,可以通过proxy_intercept_errors指令和error_page模块进行智能拦截和定制处理。本文将详细介绍如何配置Nginx,实现对上游服务器返回的404和50x错误页面的自定义处理。

服务部署情况

  • 主服务(Nginx:80)

    • 工作于80端口,配置文件路径为/usr/local/nginx/sbin/nginx
  • 上游服务(Nginx:8012)

    • 工作于8012端口,配置文件路径为/usr/local/nginx_8012/nginx

上游服务器文件说明

上游服务器提供了多种错误页面来处理404和50x错误:

  • 404.html:上游服务器默认的404错误页面。
  • 404_default.html:上游服务器的默认404错误页面。
  • 50x.html:上游服务器默认的50x错误页面。
  • 50x_default.html:上游服务器处理50x错误的默认页面。

需要注意的是,404.html50x.html是用于Nginx:80服务的配置,而404_default.html50x_default.html则是用于Nginx:8012服务的配置。

Nginx配置示例

Nginx:80服务中的404和50x配置

server {    listen 80;    server_name example.com;    location / {        proxy_intercept_errors on;        error_page 404 /404.html;        error_page 50x /50x.html;    }}

Nginx:8012服务中的404和50x配置

server {    listen 8012;    server_name example.com;    location / {        proxy_intercept_errors on;        error_page 404 /404_default.html;        error_page 50x /50x_default.html;    }}

配置说明

  • proxy_intercept_errors开启

    这个指令告诉Nginx拦截上游服务器返回的错误响应,进行处理。

  • error_page模块

    • error_page 404 /404.html;:当上游服务器返回404错误时,Nginx会请求404.html文件。
    • error_page 50x /50x.html;:当上游服务器返回50x错误(如500、502、503、504)时,Nginx会请求50x.html文件。
  • 测试结果

    测试1:Nginx:80服务处理404错误

    • 配置:Nginx:80服务中404.html文件不存在。
    • 结果:Nginx会请求上游服务器的404_default.html文件,响应头包含Cache-Control和gzip编码。

    测试2:Nginx:80服务处理404错误(自定义文件)

    • 配置:修改404.html404_not_exists.html
    • 结果:由于文件不存在,Nginx会使用上游服务器的404_default.html文件,响应内容为默认404页面。

    测试3:Nginx:80服务处理50x错误

    • 配置:Nginx:8012服务中50x_default.html文件不存在。
    • 结果:Nginx会请求上游服务器的50x_default.html文件,响应内容为默认50x页面。

    error_page的其他功能

    修改响应状态码

    error_page 404 200 /custom_404.html;
    • 效果:将404错误状态码修改为200,响应内容为custom_404.html文件。
    • 注意:等号与@404fallback之间需保留空格。

    支持多种状态码

    error_page 301 /redirect.html;error_page 302 /redirect.html;
    • 效果:将301和302状态码都重定向到redirect.html文件。

    总结

    通过合理配置Nginx的proxy_intercept_errorserror_page模块,可以实现对上游服务器返回的404和50x错误页面的自定义处理。这种方式不仅可以美化错误页面,还可以通过修改响应状态码来优化用户体验。

    转载地址:http://kcti.baihongyu.com/

    你可能感兴趣的文章
    NMAP网络扫描工具的安装与使用
    查看>>
    NMF(非负矩阵分解)
    查看>>
    NN&DL4.1 Deep L-layer neural network简介
    查看>>
    NN&DL4.3 Getting your matrix dimensions right
    查看>>
    NN&DL4.8 What does this have to do with the brain?
    查看>>
    No 'Access-Control-Allow-Origin' header is present on the requested resource.
    查看>>
    NO 157 去掉禅道访问地址中的zentao
    查看>>
    No Datastore Session bound to thread, and configuration does not allow creation of non-transactional
    查看>>
    No fallbackFactory instance of type class com.ruoyi---SpringCloud Alibaba_若依微服务框架改造---工作笔记005
    查看>>
    No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalanc
    查看>>
    No mapping found for HTTP request with URI [/...] in DispatcherServlet with name ...的解决方法
    查看>>
    No module named 'crispy_forms'等使用pycharm开发
    查看>>
    No module named cv2
    查看>>
    No module named tensorboard.main在安装tensorboardX的时候遇到的问题
    查看>>
    No module named ‘MySQLdb‘错误解决No module named ‘MySQLdb‘错误解决
    查看>>
    No new migrations found. Your system is up-to-date.
    查看>>
    No qualifying bean of type XXX found for dependency XXX.
    查看>>
    No resource identifier found for attribute 'srcCompat' in package的解决办法
    查看>>
    no session found for current thread
    查看>>
    No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
    查看>>