NGINX下带www与不带www域名转发问题排查求助
排查方向分析
让我们一步步拆解这个问题,从你的描述来看,核心是不带www的HTTP请求(不管是否显式输入http://)返回404,但HTTPS版本的不带www域名、以及带www的所有请求都能正常访问。结合DNS和Nginx配置,给你几个重点排查方向:
1. 检查Nginx中testdomain.com的HTTP监听配置
- 首先确认你是否为
http://testdomain.com配置了对应的server块,或者在默认HTTP server块中有没有处理这个域名的规则。 - 常见问题:你可能仅配置了
https://testdomain.com的server块,但未处理HTTP请求;或者HTTP server块的root路径错误、缺少正确的location规则,甚至根本没匹配到该域名,导致请求落到默认的404页面。 - 执行命令查看所有生效配置:
搜索nginx -Tserver_name testdomain.com,对比HTTP(监听80端口)与HTTPS(监听443端口)配置中的root、location是否一致。
2. 验证DNS记录的正确性
- 虽然
https://testdomain.com能正常访问说明解析有效,但仍需确认:不带www的域名的A/AAAA记录是否指向正确的服务器IP,且与www.testdomain.com的IP一致? - 本地执行以下命令对比结果:
dig testdomain.com A dig www.testdomain.com A - 同时检查是否存在DNS层面的URL转发规则,这类规则可能会干扰Nginx的请求处理逻辑。
3. 检查HTTP到HTTPS的重定向规则覆盖范围
- 多数场景下会配置HTTP请求重定向到HTTPS,但如果规则仅针对
www.testdomain.com,http://testdomain.com就不会被覆盖,进而落到默认HTTP server块导致404。 - 正确的重定向配置示例:
这样能确保所有HTTP请求(无论带不带www)都重定向到对应HTTPS域名。server { listen 80; server_name testdomain.com www.testdomain.com; return 301 https://$host$request_uri; }
4. 排查默认Server块的干扰
- 如果
http://testdomain.com的请求未匹配到任何自定义server块,会自动落到Nginx的默认server块(通常是第一个监听80端口的server块,或标记了default_server的块)。若默认块的root目录无对应资源,就会返回404。 - 通过
nginx -T输出查找listen 80 default_server;,查看该块的配置是否会影响你的域名请求。
5. 查看Nginx日志定位问题
- 访问日志(通常路径为
/var/log/nginx/access.log)会记录每个请求的域名、路径、返回码,你可以从中看到http://testdomain.com的请求到底匹配了哪个server块、请求的具体路径是什么。 - 错误日志(
/var/log/nginx/error.log)会记录404的具体原因(比如文件不存在的路径),帮助快速定位问题根源。
内容的提问来源于stack exchange,提问作者malte238749874
相关产品推荐
相关产品推荐

