我如何才能告诉nginx只为一个域提供SSL?

是的,但是,根据ngnx文档“ configurationHTTPS服务器 ”(“单个HTTPS服务器”部分), 这个问题与此问题是重复的,这个限制已经不复存在,对这个问题的答案不再有效。

从上面的链接:

在0.7.14之前,不能有select地启用SSL,如上所示。 SSL只能在使用ssl指令的整个服务器上启用,因此无法设置单个HTTP / HTTPS服务器。 listen指令的ssl参数被添加来解决这个问题。 在现代版本中使用ssl指令是不鼓励的。

但是,在该文档中规定的服务器块设置:

server { listen *:80; listen 443 ssl; server_name example.com *.example.com; [...] 

…当对https://example.net发出请求时,nginx仍然会从example.com提供内容。

我知道SSL是在HTTP请求之前提供的,但是必须有某种方法来阻止服务器响应没有与其关联的有效SSL证书的SSL请求。

任何有关这方面的见解,非常感谢。

必须有某种方法来防止服务器响应没有与其关联的有效SSL的SSL请求

那么,有点。 由于您有多个站点在同一个IP上运行,因此尝试与任何站点的 IP 进行 SSL连接的用户将始终build立其SSL连接(如果它们指向的主机名不是由证书覆盖)。

所有你可以做的,以防止这是没有SSL侦听该IP(在不同的地址上运行你的SSL的东西)。

如果你确定他们得到一个带有潜在错误的SSL连接,那么你可以select; 而不是从启用了SSL的server获取内容,您可以让它们的默认设置为其发送403错误或redirect到http侦听器,以便发送请求的主机名 – 这些选项之一对于您的系统是否有意义?

如果没有该域的SSL您将得到浏览器SSL错误,并closures连接…
错误代码:ERR_SPDY_PROTOCOL_ERROR

  server { listen 80; return 444; } server { listen 443; ssl_certificate /etc/ssl/my.crt; ssl_certificate_key /etc/ssl/my.key; return 444; } ## no SSL domain server { listen 80; server_name domain.com *.domain.com; } ## SSL domain server { listen 80; listen 443 spdy ssl; server_name SSLdomain.com *.SSLdomain.com; }