Nginx
https 與 sni 兩個證書 tho 伺服器名稱但相同的配置。我可以使用一個伺服器塊嗎?
我經常遇到以下問題。
我有一個 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
可以有多個主機名的列表,例如server_name example.org www.example.org example.com www.example.com;
雖然(從 1.11.0 開始)可以在單個
server { }
塊中載入多個證書,但它適用於多種不同類型(例如 RSA 和 ECDSA),而不適用於多個主機名。但是可以在中使用變數ssl_certificate
:從 1.15.9 版本開始,在使用 OpenSSL 1.0.2 或更高版本時,可以在文件名中使用變數:
ssl_certificate $ssl_server_name.crt; ssl_certificate_key $ssl_server_name.key;
請注意,使用變數意味著將為每次 SSL 握手載入證書,這可能會對性能產生負面影響。
對於提到的性能影響,我不建議這樣做,而是將同
server { }
一塊的所有主機名組合成一個證書作為主題備用名稱(SAN)。