Nginx配置upstream提示invalid host in upstream错误排查
报错原因
Nginx 配置中upstream块内的server指令,仅接受「主机名/IP + 可选端口」格式的后端地址,不允许带http://、https://这类协议前缀。
协议的指定是在调用upstream的转发指令(比如proxy_pass)中完成的,你在upstream的server项前加了http://,Nginx会把协议前缀当成主机名的一部分解析,自然判定为无效主机地址——无论后面跟的是域名还是IP,只要带协议前缀都会触发这个报错。
另外你执行nginx -t时看到的error.log权限报错,是因为没有用root权限执行命令,加sudo即可正常检测,和本次upstream配置错误无关。
修复方法
把upstream块里所有server项前的http://前缀删掉即可,根据后端服务的实际协议调整proxy_pass的配置:
- 如果后端是HTTP服务,upstream里直接写域名/IP,默认走80端口,
proxy_pass用http://调用upstream - 如果后端是HTTPS服务,upstream里的地址后加
:443指定端口,proxy_pass改用https://调用upstream,建议补充SNI相关配置避免证书校验错误
修正后的完整配置示例:
events {} http { upstream search { # 移除http://前缀,HTTPS服务指定443端口 server www.google.com:443 weight=2; server www.duckduckgo.com:443 weight=1; } server { listen 80; location /a { return 200 'hi'; add_header Content-Type text/plain; } location /b { # 转发时指定HTTPS协议 proxy_pass https://search; proxy_set_header Host $host; # 访问HTTPS站点时开启SNI,避免CDN场景下证书不匹配 proxy_ssl_server_name on; } } }
修改完成后执行sudo nginx -t检测配置,确认无报错后重载Nginx即可生效。
内容的提问来源于stack exchange,提问作者gabriel119435
相关产品推荐
相关产品推荐

