You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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块里同时监听8085端口即可,但一般不建议使用非标准端口作为默认HTTP入口。
  • 配置修改后记得执行sudo nginx -t检查配置语法,没问题再用sudo systemctl reload nginx生效配置。

内容的提问来源于stack exchange,提问作者shoaibdevs

火山引擎 最新活动