因此,我使用Nginx (1.4.3)反向代理一个域和子域。我安装了SSL证书来处理主域(example.com)和两个子域(比如test.example.com和mail.example.com)。因此,我自然地使用301返回将http请求移动到https。
server {
listen 80 default_server;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}效果很好。但是如果我介绍另一个我不想在HTTPS SSL Certs下使用的子域(因为我没有通配符证书,也不需要这个子域)。尽管server_name已经被隐式设置,但Nginx似乎仍然将301应用于它。因为它是1.4.3,所以我已经将它们拆分到conf.d文件夹中。
我认为这样做是因为如果我清除浏览器缓存并导航到新的子域(sd.example.com),它可以正常工作,不会重写到https。但是,如果我进入主站点(example.com),重写就会启动,我会被发送到https://example.com,那里没有问题。但是,如果我尝试返回到sd.example.com,我将被重写为https://sd.example.com,并弹出一个大的红色铬错误。
知道为什么会这样吗?我宁愿不要在这件事上胡思乱想。
发布于 2014-11-08 01:55:03
从OP评论中发布的答复
该问题是由HSTS报头引起的。在主域中,有条目includeSubDomains在HSTS头。如果浏览器访问主域并接收该HSTS报头,浏览器将强制通过主域和子域的HTTPS连接。因此,很明显,nginx并不会导致重定向。
如果您不希望子域使用HTTPS,则解决方案是删除HSTS头中的includeSubDomains。
https://serverfault.com/questions/555883
复制相似问题