在 Nginx 中,子域名在 SSL 中重定向到错误的子域名

在 Nginx 中,子域名在 SSL 中重定向到错误的子域名

我在自己的网站托管上创建了一个 CNAME 来重定向:

  • test.example.org 到 test.example.com
  • prod.example.org 到 prod.example.com

现在我尝试将 http 重定向到 https 进行生产和测试,然后重定向到我的应用程序

    server  {
        listen 80;
        server_name prod.example.com;
        return 301 https://$server_name$request_uri;
    }
    server  {
        listen 80;
        server_name test.example.com;
        return 301 https://$server_name$request_uri;
    }
# TEST
server {
        listen 80;
        server_name test.example.com;

        # SSL
        ssl on;
        ssl_certificate       fullchain.pem;
        ssl_certificate_key   privkey.pem;


        location / {
                proxy_pass http://127.0.0.1:8181;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}
# PROD
server {
        listen 80;
        server_name prod.example.com;

        # SSL
        ssl on;
        ssl_certificate       fullchain.pem;
        ssl_certificate_key   privkey.pem;


        location / {
                proxy_pass http://127.0.0.1:8182;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

上述配置存在问题,如果我输入测试。例子。组织我将重定向至产品。例子。com

答案1

您需要.example.org在 nginx 设置中为域定义服务器块。CNAME 映射仅将一个域名映射到另一个域名,因此客户端看到的 IP 地址test.example.org是运行 nginx 服务器的 IP 地址。

因此,客户端发送一个带有主机头/SSL 域名的请求test.example.org。由于 nginx 中没有匹配的server块,因此它使用默认块,在本例中是定义的最后一个块。这是因为您没有default_server设置。

相关内容