nginx / ssl:总是redirect到两个https子域中的一个

我的networking服务器支持以下两个子域名:

  • https://www.example.com
  • https://en.example.com

我想创build我的nginxconfiguration,以便:

  1. http://en.example.com $ request_uri => https://en.example.com $ request_uri
  2. http://www.example.com $ request_uri => https://www.example.com $ request_uri
  3. 独立于http或https => https://www.example.com $ request_uri的每个其他子域独立

我找不到解决此问题的任何解决scheme。 任何人都可以帮助我正确的nginxconfiguration。

首先,您应该了解,如果您的SSL证书不支持something.example.com则无法从https://something.example.comhttps://www.example.com进行“透明”httpsredirectsomething.example.com域名。 它会显示Your connection is not secure错误或类似的,当访问。 但是,您应该可以http://*.example.com地从http://*.example.comredirect到https://www.example.com 。 为此,请在nginx.conf顶部添加以下内容:

 server { listen 80; default_server; server_name _; return 301 https://www.example.com$request_uri; } 

它应该将任何请求redirect到您的IP到https://www.example.com

然后我们添加特定redirect的configuration。 这个http://en.example.com – > https://en.example.com

 server { listen 80; server_name en.example.com; return 301 https://en.example.com$request_uri; } 

这个http://www.example.com – > https://www.example.com

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

最后,我们为通过SSL提供所需内容的“真实”域添加configuration。 这个http://www.example.com

 server { listen 443 ssl; ssl_certificate /etc/ssl/www.example.com.crt; ssl_certificate_key /etc/ssl/www.example.com.key; server_name www.example.com; <your www.example.com server config here> ... </your www.example.com server config here> } 

这个http://en.example.com

 server { listen 443 ssl; ssl_certificate /etc/ssl/en.example.com.crt; ssl_certificate_key /etc/ssl/en.example.com.key; server_name en.example.com; <your en.example.com server config here> ... </your en.example.com server config here> }