我经常遇到以下问题。
我有一个 nginx 服务器通过 https 在同一个 IP 和同一个端口上提供两个主机名。每个主机名都有自己的证书。
到目前为止,我正在做的是有两种配置:
server {
listen 443 ssl;
server_name www.example1.com;
ssl_certificate www.example1.com.crt;
ssl_certificate_key www.example1.com.key;
ssl_protocols ...;
ssl_ciphers ...;
...
}
和
server {
listen 443 ssl;
server_name www.example2.com;
ssl_certificate www.example2.com.crt;
ssl_certificate_key www.example2.com.key;
ssl_protocols ...;
ssl_ciphers ...;
...
}
仅在一个服务器块中完成此操作有什么技巧吗?
我问的原因是,两台服务器共享名称和证书完全相同的配置。
到目前为止我所做的是:
server {
listen 443 ssl;
server_name www.example1.com;
ssl_certificate www.example1.com.crt;
ssl_certificate_key www.example1.com.key;
include /etc/nginx/common_config/example1_and_2/*;
}
server {
listen 443 ssl;
server_name www.example2.com;
ssl_certificate www.example2.com.crt;
ssl_certificate_key www.example2.com.key;
include /etc/nginx/common_config/example1_and_2/*;
}
这可以改进吗?有一些标准的建议吗?如果这很好,是否至少有关于这种常见配置文件的路径的建议?
server_name
可以有多个主机名的列表,例如虽然(从 1.11.0 开始)可以在单个
server { }
块中加载多个证书,但它适用于多种不同类型(例如 RSA 和 ECDSA),而不适用于多个主机名。但是可以在中使用变量ssl_certificate
:对于提到的性能影响,我不建议这样做,而是将同
server { }
一块的所有主机名组合成一个证书作为主题备用名称(SAN)。