我想将所有子域的非 SSL 流量重定向到 SSL。我想保持子域不变。我想proxy_pass
为 staging.foo.com 指定一个不同的。我现在只有 3 件事要做foo.com
,www.foo.com
和staging.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
如下图所示,所有流量似乎都www
被staging
重定向到裸域。我做错了什么?
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
必需的,但效果会更好。