Nginx 1.18.0(Ubuntu)下HTTP转HTTPS重定向配置问题排查
排查你的Nginx重定向配置问题
嘿,我帮你梳理下当前配置里的几个关键问题,以及对应的修正方案:
存在的问题
- 重定向规则未监听标准HTTP端口:第一个
server块监听的是85端口,但用户访问http://example.com时默认走的是80端口,这个重定向规则根本不会触发,自然无法把HTTP请求转到HTTPS。 - HTTP与HTTPS配置混合在同一个server块:第二个
server块同时监听85(HTTP)和443(HTTPS)端口,这会让Nginx处理请求时逻辑混乱,而且访问http://example.com:85的请求会直接走代理逻辑,不会被重定向到HTTPS。 - 重定向规则未覆盖www子域名:第一个
server块的server_name只写了example.com,没包含www.example.com,导致用户访问http://www.example.com时也不会触发重定向。
修正后的配置
把HTTP(80端口)的重定向逻辑单独拆分出来,HTTPS(443端口)的配置单独处理,这样逻辑更清晰,也能覆盖所有需要重定向的场景:
# 处理所有HTTP请求,重定向到HTTPS server { listen 80; listen [::]:80; server_name example.com www.example.com; # 用301永久重定向(对SEO更友好,临时需求可改用302) return 301 https://$server_name$request_uri; } # 处理HTTPS请求的主server块 server { listen 443 ssl; listen [::]:443 ssl; server_name example.com www.example.com; # Certbot管理的SSL配置 ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot # 静态资源路径配置 location /static/ { alias /home/shoaib/dir/static/; } location /media/ { alias /home/shoaib/dir/media_root/; } # 代理到Unix Socket的应用服务 location / { include proxy_params; proxy_pass http://unix:/run/car.sock; } }
额外说明
- 如果你确实需要保留85端口的HTTP访问并将其重定向,只需在第一个
server块里同时监听80和85端口即可,但一般不建议使用非标准端口作为默认HTTP入口。 - 配置修改后记得执行
sudo nginx -t检查配置语法,没问题再用sudo systemctl reload nginx生效配置。
内容的提问来源于stack exchange,提问作者shoaibdevs




