Nginx upstream配置不同路径:本地服务异常时如何调整备份节点路由路径?
Nginx 配置调整方案
你需要放弃原有共用同一个upstream的写法,因为统一的proxy_pass路径处理规则无法适配两个后端节点的不同路径映射要求,改用「优先代理本地+错误触发 fallback 到测试环境」的方案即可实现需求,完整配置如下:
server { listen 80; location /approot/ { # 本地服务转发规则:末尾带/会自动去除URI前缀的/approot/ proxy_pass http://127.0.0.1:8082/; # 开启上游错误拦截,触发自定义fallback逻辑 proxy_intercept_errors on; # 匹配本地服务不可用的典型状态码,跳转到备份处理节点 error_page 502 503 504 = @fallback_to_test_env; # 基础代理参数,可根据实际需求调整 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 缩短本地超时时间,加快故障切换速度,单位秒 proxy_connect_timeout 2s; proxy_send_timeout 2s; proxy_read_timeout 2s; } # 备份节点专用处理逻辑 location @fallback_to_test_env { # 末尾不带/,会完整保留原始请求的/approot/前缀 proxy_pass http://172.26.1.1:80; # 如果备份节点需要校验域名,可指定Host为正式测试域名 # proxy_set_header Host test.mycompany.com; } }
方案逻辑说明
- 本地服务正常运行时,请求路径处理逻辑和原有配置完全一致:
http://test.mycompany.com/approot/home会被转发到http://127.0.0.1:8082/home,符合第一个要求。 - 当本地服务未启动、连接超时或返回不可用状态时,Nginx会自动触发内部重定向到备份逻辑,此时原始请求的完整URI会直接拼到备份节点地址后,
http://test.mycompany.com/approot/home会被转发到http://172.26.1.1:80/approot/home,符合第二个要求。 - 该方案可直接复用扩展到你其他9个服务的配置,只需要对应修改端口、路径前缀即可。
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

