如何在nginx配置中将ssl指令放在服务器块而不是http块中?

时间:2016-01-08 12:41:04

标签: ssl nginx https

我即将为不同的虚拟主机使用不同的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阻止时可能出现什么问题?

1 个答案:

答案 0 :(得分:0)

确保您没有配置为侦听443的全局服务器。

由于您在特定虚拟主机中移动了ssl_certificatessl_certificate_key,这意味着默认配置缺少证书和密钥。 Nginx不允许这样做。配置为侦听443的每个虚拟主机,无论其是否为默认主机,都必须配置为提供证书。

  

只应在未选择侦听443的其他虚拟主机时处理default_server,那么为什么缺少default_server上的ssl证书会影响对其他虚拟主机的访问?

这就是重点。 Nginx拒绝配置,因为如果发生这种情况,由于缺少ssl_certificate,它将无法处理请求。因此,配置无效。