Nginx 子域名代理

Nginx 子域名代理

我想将所有子域的非 SSL 流量重定向到 SSL。我想保持子域不变。我想proxy_pass为 staging.foo.com 指定一个不同的。我现在只有 3 件事要做foo.comwww.foo.comstaging.foo.com。我想将裸域和 www 代理传递到 localhost 8000。并将子域代理传递staging到 localhost 8001。

http://foo.com/ -> https://foo.com/ -proxy-> 127.0.0.1:8000
http://www.foo.com/ -> https://www.foo.com/ -proxy-> 127.0.0.1:8000
http://staging.foo.com/ -> https://staging.foo.com/ -proxy-> 127.0.0.1:8001

如下图所示,所有流量似乎都wwwstaging重定向到裸域。我做错了什么?

server {
        listen 80;
        server_name foo.com www.foo.com staging.foo.com;
        rewrite ^ https://$server_name$request_uri? permanent;
}
server {
        listen 443;
        server_name foo.com www.foo.com;
        # ...
        location / {
          proxy_pass    http://127.0.0.1:8000/;
          # ...
        }
}
server {
        listen 443;
        server_name staging.foo.com;
        # ...
        location / {
          proxy_pass    http://127.0.0.1:8001/;
          # ...
        }
}

答案1

将第一server {}部分更改为:

server {
        listen 80;
        server_name foo.com www.foo.com staging.foo.com;
        return 301 https://$host$request_uri;
}

注意$server_name--> $host,这是您问题的解决方案。 替换为redirect不是return必需的,但效果会更好。

相关内容