You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx重定向配置问题:将各类域名跳转至HTTPS非WWW域名

正确配置Nginx实现强制HTTPS+非www跳转

我明白你遇到的问题了——之前对$host变量的理解确实有误,这也是很多刚接触Nginx的开发者容易踩的坑。先给你纠正一下:$host其实对应请求中的Host头字段(如果客户端发送了的话),或者是当前server块中server_name匹配到的第一个域名,所以当你访问www.api.test.example.com时,$host的值就是完整的www.api.test.example.com,并不会自动去掉前面的www.部分。

下面给你一套通用的配置方案,可以实现:

  • 所有HTTP请求(不管带不带www)强制跳转到HTTPS的非www版本
  • 所有HTTPS的www请求(包括多级子域名的www前缀,比如www.api.test.example.com)跳转到对应的非www HTTPS版本

完整配置示例

1. 处理所有HTTP请求(80端口)

这个server块会捕获所有80端口的请求,统一重定向到HTTPS的非www版本:

server {
    listen 80;
    listen [::]:80;
    server_name _; # 匹配所有HTTP请求,无需指定具体域名

    # 去掉Host中的www.前缀(如果有的话)
    set $target_host $host;
    if ($host ~* ^www\.(.*)) {
        set $target_host $1;
    }

    # 永久重定向到HTTPS的非www地址
    return 301 https://$target_host$request_uri;
}

2. 处理HTTPS的www请求(443端口)

这个server块专门匹配所有带www.前缀的HTTPS请求,跳转到对应的非www版本:

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    # 正则匹配所有以www.开头的域名
    server_name ~^www\.(.*)$;

    # 配置你的SSL证书,注意证书要覆盖对应的www域名(比如泛域名证书)
    ssl_certificate /path/to/your/certificate.pem;
    ssl_certificate_key /path/to/your/private-key.key;

    # 可选:添加SSL优化配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    # 提取去掉www.后的目标域名
    set $target_host $1;

    # 永久重定向到非www的HTTPS地址
    return 301 https://$target_host$request_uri;
}

3. 处理非www的HTTPS业务请求(443端口)

这是你的核心业务server块,处理最终的非www HTTPS请求:

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    # 配置你的非www域名,可以是单个域名或多个(用空格分隔)
    server_name example.com api.test.example.com; # 根据实际情况修改

    ssl_certificate /path/to/your/certificate.pem;
    ssl_certificate_key /path/to/your/private-key.key;

    # 可选:SSL优化配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    # 这里添加你的业务逻辑配置,比如反向代理、静态文件服务等
    location / {
        # 示例:反向代理到后端服务
        # proxy_pass http://your-backend-service;
        # proxy_set_header Host $host;
        # proxy_set_header X-Real-IP $remote_addr;

        # 示例:静态文件服务
        # root /var/www/your-site;
        # index index.html;
    }
}

关键注意事项

  • SSL证书覆盖:确保你的证书包含所有需要跳转的域名。比如如果要处理www.example.com和example.com,证书需要同时包含这两个域名;如果是多级子域名,推荐使用泛域名证书(比如*.test.example.com)或者SAN证书。
  • 配置测试:修改完配置后,先执行nginx -t检查语法是否正确,确认无误后再用nginx -s reload重新加载配置。
  • 重定向类型:示例中用的是return 301(永久重定向),适合生产环境;如果是测试阶段,可以先用return 302(临时重定向),确认跳转逻辑正确后再改成301。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:40:14