在 nginx 中将通配符域名重定向/重写为 ssl

在 nginx 中将通配符域名重定向/重写为 ssl

我尝试了此网站和其他网站上的所有解决方案,但仍然无法将带有 http 的通配符子域名重定向到 https。我最终还是

https://%2A.example.com/site_admin

在我的手机上,上述网址在 Chrome 中显示,在 IE 中显示“无法显示该页面”,在 Chrome 中显示“您的连接不是私密的”。

非通配符 nginx 服务器块工作正常。

我尝试在服务器块中重写并重定向 301 以使用 http 通配符,但它仍将 URL 重写为 %A2(*)。我认为默认服务器使用的是 *.example.com 的服务器名称,但即使使用 $host,它仍会重写为 *。是否还有其他需要包含的指令?

server {
    listen  80;
    server_name example.com www.example.com;

    # tell users to go to SSL version this time
    if ($ssl_protocol = "") {
       rewrite     ^   https://$server_name$request_uri? permanent;
    }
}
server {
    listen 443 ssl;
    server_name example.com www.example.com;

    ## ssl and locations not shown
}

server {
    listen  80;
    server_name manager.example.com ;

    # tell users to go to SSL version this time
    if ($ssl_protocol = "") {
       rewrite     ^   https://$server_name$request_uri? permanent;
    }
}
server {
    listen 443 ssl;
    server_name manager.example.com ;

    ## ssl and locations not shown
}

server {
    listen  80 default_server;
    server_name *.example.com "" ;

    # tell users to go to SSL version this time
    if ($ssl_protocol = "") {
        rewrite     ^   https://$host$request_uri? permanent;
        #rewrite     ^   https://$server_name$request_uri? permanent;
}

}
server {
    listen 443  default_server;
    server_name *.example.com ;

    ssl on;
    ## other ssl and locations not shown
}

答案1

原来是浏览器缓存的问题。清除缓存后,重定向就可以正常工作了。有时这是最简单的事情。

答案2

ssl您错过了通配符 SSL 块中的实际语句server {},因此您实际上在 443 端口上有一个 http 而不是 https。

相关内容