在Nginx中,将特定的子域映射到端口,redirect所有其他域

我试图完成三件事情:

  1. 子域将stream量映射到不同端口上的多个应用程序之一。
  2. 如果子域没有被识别,redirect到www。
  3. 要求在所有子域上使用HTTPS。

我的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; } 

你可以做任何你想要的行动。

以下为我工作…

  1. 让默认端口不同于www的端口。
  2. 让Nginx监听默认端口并将所有stream量redirect到www。

这里是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作为默认端口。 任何未使用的端口应该工作。