nginx为virtual host配置ssl证书本质是在server块中启用https监听并加载证书文件,即设置listen 443 ssl、ssl_certificate与ssl_certificate_key路径,并确保域名解析、443端口放行、证书域名匹配;同时建议添加80端口301跳转https的server块。

Nginx 中为 Virtual Host 配置 SSL 证书,本质是在对应 server 块中启用 HTTPS 监听并加载证书文件。关键不是“单独配 SSL”,而是让这个虚拟主机支持 https:// 访问——也就是把 HTTP 的 listen 80 扩展成 listen 443 ssl,再补上证书路径和加密参数。
✅ 明确前提条件
- 域名已解析到服务器 IP(如
example.com → 1.2.3.4) - 服务器 443 端口已在防火墙/安全组放行(ECS、云服务器必须检查)
- 已有 Nginx 版 SSL 证书(
.crt+.key文件,PEM 格式) - 证书绑定的域名与
server_name完全一致(如server_name example.com;,证书也得是example.com或通配符*.example.com)
? 在 server 块中添加 SSL 配置
打开你的站点配置文件(例如 /usr/local/nginx/conf/conf.d/example.com.conf 或直接改 nginx.conf 中的 server{}),确保包含以下核心项:
server {
listen 443 ssl;
server_name example.com www.example.com;
# 证书文件路径(务必用绝对路径)
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
# 推荐启用的 TLS 安全参数(提升兼容性与安全性)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:...;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# 其他常规配置(root、location 等)
root /var/www/example;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
⚠️ 注意:
ssl_certificate是证书链文件(含域名证书 + 中间 CA),不是仅根证书;若你只有fullchain.pem和privkey.pem(如 Let’s Encrypt),就分别填这两个路径。
? 同时支持 HTTP 自动跳转 HTTPS(推荐)
加一个配套的 server 块,把所有 http:// 请求 301 重定向到 https://:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
这样用户无论输 http://example.com 还是直接敲域名,都会被安全跳转。
? 验证与生效
- 检查语法:
nginx -t - 重载配置:
nginx -s reload - 浏览器访问
https://example.com,地址栏显示锁图标且无证书警告,即成功 - 可用 SSL Labs 输入域名做深度检测(看评级、协议、密钥交换是否合规)
不复杂但容易忽略细节。











