首页 > 解决方案 > NGiNX - 重定向到 https 无法通过最初请求的子域重写/替换正确的通配符字符

问题描述

我正在将NGiNX服务器用于我的一个application.

我的应用领域是,example.com

我有一种要求在动态基础上生成子域

所以我已经配置了 NGiNX 类似的东西以满足子域(业务)的要求。

我的 NGiNX 配置也是如此,

server {
    listen 80;
    server_name *.example.com;
    #access_log      off;
.....
    location / {
      # redirect to secure site
      return 301 https://$server_name$request_uri; # Here it's redirecting me along with * only instead of sub-domain name
    }
.....

}

上述配置完美运行,但HTTP不适用于HTTPS.

我正在审查以下内容,

预期的 URL 是,https://today.example.com在成功重定向到安全(301)通道后。

它正在将我重定向到这里,https://%2A.example.com/abc?abc=xyz (%2A is *, looks encoding scheme rewrite * -> %2A instead of today)

而不是它,它应该是 https://today.example.com/abc?abc=xyz

那么,如何克服这种处理 *(wildcard char) 以便成功重定向。

任何帮助都会非常明显!

标签: httpsslnginxhttpsssl-certificate

解决方案


您需要$host而不是$server_name在重定向语句中。$server_name是nginx中配置的名称,即*.example.com. $host而是客户端用于访问服务器的名称,并且在绝对 URI 或Host标头中给出,即today.example.com

return 301 https://$host$request_uri;

推荐阅读