我即将为不同的虚拟主机使用不同的 ssl 证书,所以我首先将现有的 ssl 指令从 http
block 移动到 server
block 之一,在我开始将其他 ssl 证书指令添加到其他 server
block 之前。但是一旦我这样做,所涉及的网络服务器就无法再访问了。 Chrome 报告连接已关闭
,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
block 移动到 server
block 时可能会出现什么问题?
最佳答案
确保您没有将全局服务器配置为监听 443。
因为您在特定虚拟主机中移动了 ssl_certificate
和 ssl_certificate_key
,这意味着默认配置缺少证书和 key 。这是 Nginx 不允许的。每个配置为监听 443 的虚拟主机,无论是否为默认设置,都必须配置为提供证书。
The default_server should only be processed when other virtual host listening on 443 is not selected, so why lacking ssl certificates on the default_server could impact access to other virtual hosts?
这就是重点。 Nginx 拒绝配置,因为如果发生这种情况,它将无法处理请求,因为缺少 ssl_certificate
。因此,配置无效。
关于ssl - 如何在 nginx 配置中将 ssl 指令放在服务器 block 而不是 http block 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34677376/