Nginx捕获并自定义proxy_pass返回的错误问题

 更新时间:2024年06月18日 09:22:08   作者:sbdx  

这篇文章主要介绍了Nginx捕获并自定义proxy_pass返回的错误问题,具有很好的参考价值,希望对大家有所帮助,如有错误未考虑完全的地方,望不吝赐教

目录
  • Nginx捕获并自定义proxy_pass返回错误
    • 需求
    • 解决方法
  • Nginx的proxy_pass、root、alias的说明
    • 1、root
    • 2、alias(只能用于location)
    • 3、proxy_pass
  • 总结

    Nginx捕获并自定义proxy_pass返回错误

    需求

    实际情况:

    后端图片存储服务对接华为存储,把数据写在华为上。

    上级会不定时的对图片进行抽查考核,要求5s内必须返回数据,但是图片服务不定时会挂掉,由于代码年代久远已无人维护,只好在图片服务前端再部署个nginx,通过proxy_pass代理后端服务,当后端返回404或5xx错误时,对proxy_pass进行捕获,实现自定义输出。

    解决方法

    upstream DGIMediaServer {
    	server 172.24.49.xxx:6551 fail_timeout=3s;
    }
    server {
    	listen 8888;
    	server_name _;
    	root html;
    	sent_timeout 5s;
    	#将下面几个错误码跳转到/200.jpg
    	error_page 404 500 502 =200 /200.jpg;
    	location = /200.jpg {
    		root html; 
    	}
    	location / {
    		#使用自定义捕获,不开启则无法捕获proxy_pass的错误
    		proxy_intercept_errors on;
    		#连接服务器超时设置
    		proxy_connect_timeout 3s;
    		#发送数据超时设置
    		proxy_send_timeout 3s;
    		#返回数据超时设置
    		proxy_read_timeout 3s;
    		#自定义错误处理
    		error_page 404 500 502 503 504=200 /200.jpg;
    	}
    	index index.html index.php;
    	charset UTF-8;
    }
    

    Nginx的proxy_pass、root、alias的说明

    代理配置

    1、root

    root配置代理路径时,会在代理的地址后拼接配置字段:

    location /static {
    root static/image;
    
    }

    在访问http://ip:port/static/*.*时会映射到http://ip:port/static/static/image/*.*

    2、alias(只能用于location)

    alias配置代理路径时,直接替换代理地址:

    location /static {
    alias static/image;
    
    }

    在访问http://ip:port/static/*.*时会映射到http://ip:port/static/image/*.*

    3、proxy_pass

    proxy_pass配置代理路径时,直接替换整个代理路径,包括ip地址的端口等:

    location /static {
    proxy_pass http://ip_two:port_two/static;
    
    }

    在访问http://ip:port/static/*.*时会映射到http://ip_two:port_two/static/static/*.*

    • 代理路径后不带斜杠时,配置路径会替代原本的ip和端口等,并拼接代理地址。
    • 代理路径后带斜杠时,配置路径会替代原本的ip和端口等,不拼接代理地址。
    location /static/ {
    proxy_pass http://ip_two:port_two/abc/;
    
    }

    在访问http://ip:port/static/*.*时会映射到http://ip_two:port_two/abc/*.*

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持小闻网。

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。