Nginx虚拟主机本地可访问但公网无法访问问题求助
问题排查方案
核心根因分析
你当前遇到的404问题90%概率是server_name配置不匹配导致的:
你当前配置里server_name localhost的规则,仅会匹配请求头Host为localhost的请求,公网访问时你用的是服务器公网IP或者绑定的域名,此时请求的Host头为公网IP/域名,无法匹配到该server块,Nginx会自动转发到默认加载的其他server块,自然找不到/ib路径的规则,返回404。
排查步骤
- 第一步:修正server_name配置
将server_name localhost修改为你实际公网访问用的地址,示例:# 配置为你的公网IP和绑定的域名 server_name 110.xx.xx.xx yourdomain.com; # 若要让所有Host的请求都匹配该server块,可直接用通配符 server_name _; - 第二步:检查proxy_pass路径规则
当前配置下location /ib+proxy_pass http://localhost:3000的组合,会将完整的/ib/xxx路径透传给上游3000端口的服务。如果你的上游服务没有/ib前缀的路由,需要在proxy_pass末尾加斜杠自动去掉前缀:proxy_pass http://localhost:3000/; - 第三步:确认端口放通规则
检查云服务器安全组、系统内部防火墙(ufw/firewalld)的入站规则,确认80端口已经对公网开放。 - 第四步:重载Nginx配置生效
配置修改完成后执行以下命令验证语法并重载:# 验证配置语法正确性 nginx -t # 重载配置 nginx -s reload
验证方法
在服务器本地直接用公网IP执行curl请求,验证是否返回200:
curl -o /dev/null -s -w "%{http_code}\n" http://你的公网IP/ib
内容的提问来源于stack exchange,提问作者Rockinroll
相关产品推荐
相关产品推荐

