【问题标题】:Nginx wildcard subdomain redirect to non-wwwNginx 通配符子域重定向到非 www
【发布时间】:2016-03-28 03:31:25
【问题描述】:

我有一个域设置了通配符子域以进行白标访问。我正在努力防止人们输入http://www.subdomain.domain.com/ 但努力寻找解决方案。 (我已经进行了重写以始终使用安全协议。)

我目前的设置是这样的(嗯,相关部分):

server {
    listen 80;
    server_name  domain.com *.domain.com;
    rewrite ^ https://$http_host$request_uri? permanent;
}

server {
    listen 443;
    ssl on;
    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/certificate.key;
    server_name domain.com *.domain.com;

    ...
}

我实现的是http://domain.comhttp://sub.domain.com都重定向到https协议,换句话说分别是https://domain.comhttps://sub.domain.com。我仍然希望实现的是http://www.domain.comhttps://www.domain.com 都重定向到https://domain.comhttp://www.sub.domain.comhttps://www.sub.domain.com 也都重定向到https://sub.domain.com

有人可以帮忙吗?

(PS:我什至在考虑应用全局 nginx 设置来删除同一服务器上运行的所有域的 URL 的 www 部分,如果这是一个选项的话。)

【问题讨论】:

    标签: redirect ssl nginx no-www


    【解决方案1】:

    要从请求的服务器名称中删除前导 www. 序列,请将此 if 块放置在 SSL 服务器容器顶部附近(在任何其他 URI 处理指令之前):

    if ($http_host ~* ^www\.(.*)$ ) 
    { 
        return 301 $scheme://$1$request_uri;
    }
    

    一般是ifshould be used very carefully,不过这种情况下完全没问题。

    【讨论】:

    • 我们将其用于多租户的动态子域,其中 www 会导致问题,并且此方法效果很好,并且在重定向中几乎不引人注意。这减少了对应用层中任何类型检查的需求,并在代理处更直接地处理它。
    猜你喜欢
    • 2017-06-20
    • 2020-12-31
    • 2019-01-23
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 2018-12-10
    相关资源
    最近更新 更多