HAProxy配置resolvers代理Nginx服务返回503错误问题排查
问题原因与修复方案
核心配置错误点
- 错误配置了resolvers的nameserver参数:HAProxy的
resolvers配置块是用来指定DNS解析服务器的,你当前将nameserver指向了业务域名something.mydomain.com的80端口,80是Nginx提供业务服务的端口,并非DNS服务端口(DNS默认端口为53),HAProxy无法从该地址完成域名解析,因此无法找到可用的后端服务,返回<NOSRV>503错误。 - 可选遗漏配置:如果后端Nginx配置了基于域名的虚拟主机,需要在backend中明确指定转发的Host请求头,否则HAProxy默认会将server字段解析出的IP作为Host头转发,会导致Nginx无法匹配到正确的站点。
修复方案
方案1:不需要动态域名解析的场景
直接在backend的server配置中写死IP即可,无需配置resolvers,配置示例:
acl host_something hdr(host) -i something.mydomain.com use_backend some_backend if host_something backend some_backend server server1 <IP-ADDRESS>:80 check # 若Nginx有虚拟主机配置,加上下面这行 http-request set-header Host something.mydomain.com
方案2:需要动态域名解析的场景
将resolvers的nameserver替换为实际可用的DNS服务器地址,比如公网DNS或者内网自建DNS:
acl host_something hdr(host) -i something.mydomain.com use_backend some_backend if host_something resolvers some_resolver # 示例用公网114DNS,可替换为你实际使用的DNS服务器,默认端口53 nameserver public_dns 114.114.114.114:53 # 可按需配置解析有效期等参数 hold valid 300s backend some_backend server server1 something.mydomain.com:80 check resolvers some_resolver http-request set-header Host something.mydomain.com
内容的提问来源于stack exchange,提问作者wiktor
相关产品推荐
相关产品推荐

