Nginx:如何redirect到https,但不是子域

我希望Nginx将访问者redirect到我的顶级域名上的HTTPS,但不是为某些子域名(因为我不想麻烦添加子域名到我的证书,而不是必要的)。 似乎发生的事情是Nginxredirect到我的顶级域以及所有子域上的HTTPS,尽pipe我只是明确地将redirect放在顶级域的服务器块中。 下面基本上是我这样做的方式:

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

当用户访问http://nossl.example.com时 ,他们被迫使用SSL(HTTPS),从而得到关于证书的丑陋警告。 我怎么能这样做呢?

在nginxconfigurationSSL:

find代码“add_header Strict-Transport-Security”:

 server { listen 443 ssl; server_name www.example.com; .... add_header Strict-Transport-Security "max-age=31536000; includeSubDomains;"; } 

请删除参数includeSubDomains。 正确的代码是:

服务器{

  listen 443 ssl; server_name www.example.com; .... add_header Strict-Transport-Security "max-age=31536000;"; } 

这将不会在子域上应用ssl。

这是我提出的丑陋的解决scheme。 我为https://nossl.example.com添加了另一个redirect到http://nossl.example.com的服务器块。 我认为应该有一个更优雅的解决scheme。

 server { server_name example.com; listen 80; return 301 https://example.com$request_uri; } server { server_name example.com; listen 443 ssl; ... } server { server_name nossl.example.com; listen 80; } server { server_name nossl.example.com; listen 443 ssl; return 301 http://nossl.example.com$request_uri; }