nginx启用https的核心是listen 443 ssl;指令配合ssl_certificate和ssl_certificate_key指定证书与私钥,支持sni多域名共用443端口,并需配置tlsv1.2+、强加密套件、hsts等安全增强项。

在 Nginx 虚拟主机中启用 HTTPS,核心是通过 listen 指令明确声明 SSL 支持,并配合证书路径完成安全通信配置。
必须添加 ssl 参数到 listen 指令
仅写 listen 443; 不会启用 HTTPS,Nginx 会当作普通 HTTP 处理。正确写法是:
-
listen 443 ssl;—— 启用 TLS 加密(SSL 是历史叫法,实际使用 TLS) -
listen 443 ssl http2;—— 同时启用 HTTP/2(需 OpenSSL ≥ 1.0.2,Nginx ≥ 1.9.5) -
listen [::]:443 ssl;—— 显式监听 IPv6 地址的 443 端口
配套配置 SSL 证书与私钥
仅开启 ssl 监听还不够,必须提供合法证书链和私钥文件,否则启动失败或连接被拒绝:
-
ssl_certificate /path/to/fullchain.pem;—— 证书文件(含域名证书 + 中间证书) -
ssl_certificate_key /path/to/privkey.pem;—— 对应的私钥文件(不可带密码,或用ssl_password_file指定) - 证书路径必须为绝对路径,且 Nginx 主进程有读取权限
多个 HTTPS 虚拟主机共用 443 端口
同一端口可运行多个 HTTPS 站点,靠 server_name 和 SNI(Server Name Indication)区分:
- 客户端在 TLS 握手阶段发送请求的域名(SNI 扩展),Nginx 根据该信息匹配
server_name - 每个
server块都需独立配置listen 443 ssl;和各自的证书 - 示例:
server {
listen 443 ssl;
server_name site-a.com;
ssl_certificate /ssl/site-a.crt;
ssl_certificate_key /ssl/site-a.key;
# …
}
<p>server {
listen 443 ssl;
server_name site-b.net;
ssl_certificate /ssl/site-b.crt;
ssl_certificate_key /ssl/site-b.key;</p><h1>…</h1><p>}</p>建议补充基础安全配置
避免使用默认弱参数,提升 HTTPS 健壮性:
- 设置强 TLS 协议版本:
ssl_protocols TLSv1.2 TLSv1.3; - 指定加密套件:
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:…; - 启用 OCSP Stapling:
ssl_stapling on; ssl_stapling_verify on; - 添加 HSTS 头防止降级:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;











