我试图完成三件事情:
我的nginxconfiguration到目前为止是:
map $subdomain $subdomain_port { default 8000; www 8000; subdomain1 8001; subdomain2 8002; subdomain3 8003; } server { listen 80; listen [::]:80; server_name _; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name ~^(?P<subdomain>.+?)\.mydomain\.com$; ssl_certificate <cert>; ssl_certificate_key <key>; location / { # ... various proxy headers, then ... proxy_pass http://127.0.0.1:$subdomain_port; proxy_redirect off; } }
这几乎成功(它完成#1和#3),而不是将foo.mydomain.comredirect到www.mydomain.com ,它只是在不redirect的情况下为www内容服务。 我不确定如何redirect未映射的子域,而不会将整个事件分割成单独的server块,我真的不想这样做。
有没有办法将未在地图中明确提到的所有子域redirect到www ?
只需实现一个默认服务器。 这是我的
server { listen 80 default_server; server_name _; return 302 https://www.example.com; }
你可以做任何你想要的行动。
以下为我工作…
这里是Nginx的configuration,使其工作的变化…
map $subdomain $subdomain_port { default 8888; www 8000; subdomain1 8001; subdomain2 8002; subdomain3 8003; } server { listen 8888; server_name _; return 301 https://www.domainname.com/$request_uri; } # other configs remain the same
我用8888作为默认端口。 任何未使用的端口应该工作。