我即将为不同的虚拟主机使用不同的ssl证书,所以我开始将现有的ssl指令从http
块移动到server
块中的一个,然后我开始添加其他ssl证书指令到其他server
块。但是一旦我这样做,就不能再访问所涉及的Web服务器了。 Chrome报告了connection closed
和Nginx的错误日志,如下所示:
2016/01/08 20:13:32 [error] 16968#0: *364 no "ssl_certificate" is defined in server listening on SSL port while SSL handshaking, client: x.x.x.x, server: 0.0.0.0:443
我移动的ssl指令包括:
ssl_certificate
ssl_certificate_key
ssl_protocols
ssl_dhparam
ssl_prefer_server_ciphers
ssl_ciphers
将这些指令从http
阻止移动到server
阻止时可能出现什么问题?
答案 0 :(得分:0)
确保您没有配置为侦听443的全局服务器。
由于您在特定虚拟主机中移动了ssl_certificate
和ssl_certificate_key
,这意味着默认配置缺少证书和密钥。 Nginx不允许这样做。配置为侦听443的每个虚拟主机,无论其是否为默认主机,都必须配置为提供证书。
只应在未选择侦听443的其他虚拟主机时处理default_server,那么为什么缺少default_server上的ssl证书会影响对其他虚拟主机的访问?
这就是重点。 Nginx拒绝配置,因为如果发生这种情况,由于缺少ssl_certificate
,它将无法处理请求。因此,配置无效。