Nginx 1.10.3(Ubuntu)下http://www.example.net 301重定向至HTTPS失效问题
看起来你遇到的情况很明确:其他HTTP到HTTPS的重定向都正常,唯独http://www.example.net没有触发预期的301跳转。结合你提供的配置和Nginx版本(1.10.3 on Ubuntu),我整理了几个最可能的原因和对应的排查/解决步骤:
1. 检查是否存在冲突的Server块
Nginx会根据请求的Host头匹配对应的server_name,但如果有默认Server块(带有default_server标记)或者其他监听80端口且能匹配www.example.net的Server块,你的配置可能不会被触发。
- 先查看所有监听80端口的Server配置:
grep -r "listen 80" /etc/nginx/sites-available/ /etc/nginx/conf.d/ - 如果发现带有
default_server的Server块,比如:
这个默认块会优先处理未匹配到其他server { listen 80 default_server; listen [::]:80 default_server; # 其他配置内容 }server_name的请求(或者如果你的www.example.net块没有明确匹配,可能被默认块拦截)。
解决方法:
把你的www.example.net的80端口Server块设置为默认,或者合并所有HTTP重定向规则到一个块里:
server { listen 80; listen [::]:80; server_name example.net www.example.net; return 301 https://www.example.net$request_uri; }
这样不管请求是example.net还是www.example.net的HTTP地址,都会统一跳转到HTTPS的www版本,也避免了Server块冲突。
2. 验证配置是否生效
很多时候配置修改后没有重载Nginx,导致新规则不生效:
- 先检查配置语法是否正确:
sudo nginx -t - 如果语法没问题,重载Nginx服务:
# Ubuntu 16.04及以上用systemctl sudo systemctl reload nginx # 旧版本用service sudo service nginx reload
3. 排除浏览器缓存干扰
有时候浏览器会缓存旧的重定向规则,导致测试不准确。可以用curl命令直接在服务器上测试,绕过浏览器缓存:
curl -I http://www.example.net
查看返回的HTTP/1.1状态码和Location头,如果返回301 Moved Permanently且Location是https://www.example.net/,说明配置已经生效,只是浏览器缓存的问题。
4. 检查端口占用和防火墙
确保80端口确实被Nginx占用,且防火墙允许80端口的流量:
- 查看80端口的占用情况:
输出应该显示sudo ss -tulpn | grep :80nginx进程监听80端口。 - 检查Ubuntu的UFW防火墙规则:
如果没有sudo ufw status80/tcp的允许规则,添加:sudo ufw allow 80/tcp
5. 确认DNS解析正确性
虽然其他重定向正常,但还是要确认www.example.net的DNS解析指向的是当前Nginx服务器:
dig www.example.net +short
确保返回的IP地址和你的服务器IP一致。
按照这些步骤排查后,应该能解决http://www.example.net无法重定向的问题。
内容的提问来源于stack exchange,提问作者SecretCoder

