nginx 中为 virtual host 配置 ssl 证书需在对应 server 块中监听 443 端口、指定证书与私钥路径、设置 tls 协议和加密套件,并建议添加 80 端口重定向以强制 https。

在 Nginx 中为 Virtual Host(虚拟主机)配置 SSL 证书,本质是给某个 server 块启用 HTTPS,核心在于指定证书路径、监听 443 端口,并正确匹配域名。不是所有 server 块都需要证书,只有对外提供 HTTPS 服务的那个才需配置。
确认你的 Virtual Host 已独立定义
确保你要加证书的站点已通过单独的 server 块声明,比如:
- 在
/etc/nginx/sites-available/example.com中定义了该站点 - 并通过软链接启用:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ -
server_name明确写了你的域名(如example.com www.example.com)
准备证书文件并设好权限
把证书文件放到服务器安全位置(推荐 /etc/nginx/ssl/),必须包含:
- 证书文件(
.pem或.crt)——含公钥和可能的中间证书 - 私钥文件(
.key)——不能被其他用户读取
执行命令限制私钥权限:sudo chmod 600 /etc/nginx/ssl/example.com.keysudo chown root:root /etc/nginx/ssl/example.com.*
在对应 server 块中添加 SSL 配置
编辑该 Virtual Host 的配置文件,在 server 块内写入:
listen 443 ssl http2; server_name example.com www.example.com; <p>ssl_certificate /etc/nginx/ssl/example.com.pem; ssl_certificate_key /etc/nginx/ssl/example.com.key;</p><h1>推荐基础安全参数</h1><p>ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; ssl_prefer_server_ciphers off; </p>
注意:listen 443 ssl http2 中的 ssl 关键字不可省略,它告诉 Nginx 此端口需要 TLS 握手。
强制跳转 HTTPS(可选但强烈建议)
再新增一个仅监听 80 端口的 server 块,把 HTTP 请求全量重定向:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
这样用户无论输入 http:// 还是直接敲域名,都会自动走 HTTPS。
配置完后务必运行 sudo nginx -t 测试语法,再 sudo systemctl reload nginx 生效。证书生效后,浏览器地址栏会出现锁形图标,说明 Virtual Host 的 HTTPS 已就绪。











