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

Nginx重定向链问题:排查Map实现单次HTTP转HTTPS无WWW跳转的错误

Nginx重定向链问题排查与修复

你的配置没生效,大概率是这两个核心问题:

1. Map块放错位置了

Nginx的map指令必须放在http全局上下文(所有server块外面),要是你把它写到某个server块里面,这个映射完全不会生效,$nonwwwhost变量拿不到正确值,跳转逻辑还是会用原来的$host,自然会出现先跳www再跳主域名的链。

2. HTTP监听的Server块没覆盖全域名

如果你的HTTP server块只配了server_name www.example.com,example.com的请求会落到默认server块,要是默认块的规则是跳去www,那就算map配置对了,也会先触发www跳转,再走HTTPS的非www重定向。


正确配置示例

把map放在http全局块,同时覆盖HTTP和HTTPS的所有域名:

http {
    # 全局配置(比如日志、SSL参数等)...

    # 定义非www域名映射(必须在server块外)
    map $host $nonwwwhost {
        ~*^www\.(.*)$  $1;  # 匹配www开头的域名,提取出主域名
        default        $host; # 非www域名直接返回原host
    }

    # 你的原有$real_scheme映射配置
    map $scheme $real_scheme {
        default $scheme;
    }

    # HTTP 80端口监听:统一跳转到HTTPS非www域名
    server {
        listen 80;
        server_name example.com www.example.com;

        if ($real_scheme = 'http') {
            return 301 https://$nonwwwhost$request_uri;
        }
    }

    # HTTPS 443端口:处理www域名的残留跳转
    server {
        listen 443 ssl;
        server_name www.example.com;

        return 301 https://example.com$request_uri;
    }

    # HTTPS主域名业务配置
    server {
        listen 443 ssl;
        server_name example.com;

        # 你的业务配置(根目录、反向代理等)
        root /usr/share/nginx/html;
        index index.html;

        # SSL证书配置
        ssl_certificate /path/to/your/cert.pem;
        ssl_certificate_key /path/to/your/key.pem;
    }
}

额外注意事项

  • 改完配置先跑nginx -t检查语法,别直接重启导致服务挂了。
  • 测试前清浏览器缓存,301重定向会被浏览器缓存,旧缓存会干扰测试结果。
  • 确认$real_scheme的映射逻辑没问题,能准确识别HTTP请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:36:28