Nginx反向代理下HTTP协议WWW域名请求返回404故障排查
问题根因
你的定位完全准确,故障出在80端口监听的server块逻辑:Certbot自动生成的配置仅对partyshare.shop的HTTP请求配置了HTTPS 301跳转,www.partyshare.shop的HTTP请求无法匹配现有if判断条件,会直接命中块末尾的return 404规则,因此返回404错误。
你之前自行添加if规则后出现的SSL证书异常、HTTP标识标红问题,基本是if写法不符合Nginx语法、或误修改了443块的证书/跳转逻辑导致的,不需要通过堆叠if规则实现需求,直接简化80块逻辑即可。
修复配置
直接将你现有配置中80端口对应的server块整体替换为以下内容,不需要改动443端口的现有正常配置:
server { listen 80; listen [::]:80; server_name partyshare.shop www.partyshare.shop; # 所有HTTP请求直接跳转至对应HTTPS地址,自动适配请求的域名 return 301 https://$host$request_uri; }
如果你需要做域名统一(比如强制所有访问都跳转到根域,或强制跳www域),可以把跳转规则改为固定域名,例如强制跳根域就写为
return 301 https://partyshare.shop$request_uri;,不需要额外加判断逻辑。
生效步骤
- 先备份当前Nginx配置文件,避免配置错误无法快速回滚
- 替换完成后执行配置校验命令:
nginx -t,确认返回syntax is ok和test is successful提示 - 校验通过后执行重载命令让配置生效:
systemctl reload nginx
修复完成后访问http://www.partyshare.shop就会正常跳转到HTTPS地址,不会再返回404,原有正常访问的地址也不会受影响。
内容的提问来源于stack exchange,提问作者R3FL3CT
相关产品推荐
相关产品推荐

