Nginx反向代理配置upstream server使用域名(如www.test.com)无法生效求助
反向代理使用域名作为upstream server的解决方法(以Nginx为例)
配置不生效的核心原因是大部分开源反向代理服务默认只会在启动/重载配置时解析一次域名,解析结果缓存过期或者上游IP变动后就会请求失败,你可以按照以下步骤调整配置:
前置检查
- 登录反向代理所在服务器,执行
nslookup www.test.com确认服务器本身可以正常解析该域名,无DNS污染或者解析故障 - 执行
telnet www.test.com 443确认网络连通性正常,无防火墙、安全组或者上游IP白名单拦截
配置方案
方案1:无需upstream块(推荐开源版Nginx使用)
直接在proxy_pass中填写域名,同时显式配置DNS解析器即可实现动态解析:
server { listen 80; server_name 你的代理服务访问域名; # 可替换为服务器本地DNS或者公共DNS,valid指定解析结果缓存时长,单位秒 resolver 114.114.114.114 8.8.8.8 valid=300s; resolver_timeout 5s; location / { proxy_pass https://www.test.com; # HTTPS上游必须开启,用于SNI证书校验 proxy_ssl_server_name on; # 常规反向代理头配置 proxy_set_header Host www.test.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
方案2:使用upstream块
如果必须通过upstream块管理上游,开源版Nginx可以通过变量方式实现动态解析:
http { resolver 114.114.114.114 8.8.8.8 valid=300s; resolver_timeout 5s; upstream test_backend { server $test_upstream:443; } server { listen 80; server_name 你的代理服务访问域名; set $test_upstream www.test.com; location / { proxy_pass https://test_backend; proxy_ssl_server_name on; proxy_set_header Host $test_upstream; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } }
修改配置后执行nginx -t校验配置无问题,再执行nginx -s reload重载配置即可生效。
配置示意图

内容的提问来源于stack exchange,提问作者Dutta
相关产品推荐
相关产品推荐

