Nginx配置无法强制HTTP重定向至HTTPS的问题求助
Nginx HTTP强制跳转HTTPS配置修复
你的配置存在三个关键问题导致重定向失效:
- 同一个
server块同时监听80(HTTP)和443(HTTPS)端口,重定向规则会被HTTPS请求误触发 - 使用了未定义的变量
$mydomain.com,Nginx无法解析该变量 - 80端口的
server块中多余的location /配置,return指令会直接返回响应,后续配置不会执行
修复后的配置需要拆分两个独立的server块,分别处理HTTP重定向和HTTPS请求:
# 处理所有HTTP请求,强制跳转至HTTPS server { listen 80; server_name www.mydomain.com mydomain.com; # $host会保留原请求的域名(www或非www),确保跳转后域名一致 return 301 https://$host$request_uri; } # 处理HTTPS请求,提供实际服务 server { listen 443 ssl; server_name www.mydomain.com mydomain.com; ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/mydomain.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 / { proxy_pass http://unix:/home/mydomain/gunicorn.sock; } }
额外说明
- 若希望统一跳转至非www的HTTPS地址,可将第一个
server块的return语句改为:return 301 https://mydomain.com$request_uri; - 修改配置后,先执行
nginx -t验证语法正确性,再执行systemctl reload nginx重载Nginx使配置生效
内容的提问来源于stack exchange,提问作者jabodom934
相关产品推荐
相关产品推荐

