我希望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; }