我想redirect非SSLstream量到所有子域的SSL。 我想保持子域相同。 我想为staging.foo.com指定一个不同的proxy_pass 。 我现在只有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
随着下面,它看起来像所有stream量到www或staging被redirect到裸露的域名。 我究竟做错了什么?
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/; # ... } }
将第一个server {}部分更改为:
server { listen 80; server_name foo.com www.foo.com staging.foo.com; return 301 https://$host$request_uri; }
注意$server_name – > $host ,这是你的问题的解决scheme。 更换redirect return是没有必要的,但要好得多。