nginx 正常提供 https 站点需完成证书部署、启用 ssl 模块、配置加密参数并确保流量正确路由,重点在于证书有效性、协议安全性与配置一致性。

要让 Nginx 正常提供 HTTPS 站点,核心是完成证书部署、启用 SSL 模块、配置加密参数并确保流量正确路由。整个流程不复杂但容易忽略细节,重点在于证书有效性、协议安全性与配置一致性。
准备有效的 SSL 证书和私钥
证书是 HTTPS 的信任基础,必须匹配域名且未过期:
- 推荐使用 Let’s Encrypt 免费证书(90 天有效期),通过 certbot 自动申请:
certbot --nginx -d example.com - 商业证书需从 DigiCert、GlobalSign 等 CA 获取,包含主证书、私钥及中间证书链(.pem 或 .crt + .key 格式)
- 将证书文件统一存放在安全路径,例如
/etc/nginx/ssl/example.com/,并设权限:chmod 600 *.key - 若使用中间证书,需合并主证书与中间证书为
fullchain.pem,避免客户端链验证失败
配置 server 块启用 HTTPS 服务
在站点配置文件(如 /etc/nginx/sites-available/example.com)中添加标准 HTTPS server 块:
- 监听 443 端口并启用 SSL:
listen 443 ssl http2;(http2 可选但推荐) - 指定域名:
server_name example.com; - 加载证书与私钥:
ssl_certificate /etc/nginx/ssl/example.com/fullchain.pem;和ssl_certificate_key /etc/nginx/ssl/example.com/privkey.pem; - 禁用老旧协议,仅保留 TLSv1.2 与 TLSv1.3:
ssl_protocols TLSv1.2 TLSv1.3; - 选用强加密套件:
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
强制 HTTP 流量跳转至 HTTPS
避免用户手动输入 http://,需显式重定向所有 80 端口请求:
- 新增一个仅监听 80 的 server 块:
listen 80; - 使用 301 永久重定向:
return 301 https://$host$request_uri; - 确保该 server 块的
server_name与 HTTPS 块一致,否则可能跳转到错误域名
验证配置并热加载服务
配置完成后务必校验语法并平滑生效:
- 检查语法是否正确:
sudo nginx -t,输出 “syntax is ok” 且 “test is successful” 才可继续 - 重载配置而非重启:
sudo nginx -s reload,避免连接中断 - 用浏览器访问
https://example.com,确认地址栏显示锁形图标;也可用命令行验证:curl -I https://example.com查看响应头中的200 OK与Strict-Transport-Security(如已启用 HSTS)











