我在服务器上有很多网站,都是通过nginx托管的。一个站点有证书,另一个站点没有证书。下面是两个站点的示例,使用(相当准确)的真实配置表示:
server {
listen 80;
server_name ssl.example.com;
return 301 https://ssl.example.com$request_uri;
}
server {
listen 443 ssl;
server_name ssl.example.com;
}
server {
listen 80;
server_name nossl.example.com;
}SSL对ssl.example.com很好。如果我访问http://nossl.example.com,效果很好,但是如果我尝试访问https://nossl.example.com (注意SSL),我会收到关于ssl.example.com证书的丑陋警告。
根据它的声音,因为ssl.example.com是唯一监听端口443的站点,所以所有请求都被发送到它,而不管域名如何。
我能做些什么来确保Nginx服务器指令只响应它负责的域吗?
发布于 2013-11-13 02:58:54
对主机使用不同的IP地址,不应在SSL上回答,并确保nginx只侦听端口443上的适当IP地址。
发布于 2013-11-12 19:21:14
真正隔离ssl站点( sans多主机/通配符ssl cert )的唯一方法是向您的框中添加辅助公共ip(必须通过提供程序进行请求)。
然后,通过dns将每个站点/子域放到自己的ip上。这样,一些域名:443将被打开,有些将旋转到超时(通过iptables使用DROP )。
发布于 2013-11-12 19:53:36
不幸的是,域(通过Host报头)是加密有效负载的一部分。因此,nginx在提交证书之后才知道它用于什么域。这是SSL的技术限制,而不是nginx。
http://en.wikipedia.org/wiki/Server_名字_指示可能会有所帮助,但XP上的IE用户(仍占互联网用户的相当大比例)无法使用它。
https://serverfault.com/questions/554499
复制相似问题