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

标签 ssl nginx https

我即将为不同的虚拟主机使用不同的 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_certificatessl_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/

相关文章:

ssl - 从 Spark 流读取 Kafka SSL 客户端信任库文件时出错

python - 使用 python pvlib 库时出现 SSL 证书错误

nginx - 无法在nginx+php-fpm上运行.html文件

Node.js Hello world 脚本不起作用

docker - Traefik和Nginx在Docker上使用HTTPS/400错误请求

ubuntu - HTTPS 没有收到数据

c# - 如何配置 IIS/Asp.Net 以使用客户端证书与服务器进行 TLS 连接

Postgresql Kubernetes 部署无法从 Secrets 读取证书文件

linux - 浏览器中的 url 与 nginx 配置中 server_name 的值之间的区别

encryption - HTTPs 网址加密