要在 nginx 中启用 https,需确认 ssl 模块已编译、规范存放证书与私钥(权限设为 600)、配置 80 端口跳转和 443 端口 https 服务,并通过 nginx -t 验证、reload 生效,最后用浏览器和 ssl labs 测试验证。

要在 Nginx 中启用 HTTPS,核心是完成三件事:确保 SSL 模块可用、正确放置证书文件、编写安全且合规的 443 端口配置,并配套设置 HTTP 自动跳转。整个过程不复杂但容易忽略权限和协议细节。
确认 Nginx 已编译 SSL 模块
SSL 功能不是默认开启的,必须确认 Nginx 编译时启用了 --with-http_ssl_module。否则配置中出现 ssl_certificate 会直接报错。
- 运行
nginx -V 2>&1 | grep -i ssl,若输出含--with-http_ssl_module,说明已支持 - 若无该模块,需回到 Nginx 源码目录重新 configure(保留原有参数,仅追加
--with-http_ssl_module),再make并替换nginx二进制文件 - 注意:无需
make install,避免覆盖配置;替换后用nginx -t验证语法即可
上传并规范存放证书文件
证书和私钥必须放在 Nginx 可读、且私钥严格受限的路径下,推荐统一存于 /etc/nginx/ssl/。
- 解压证书包,提取
.crt(或.pem)和.key文件;如有中间证书(如ca-bundle.crt),一并保存 - 创建目录:
sudo mkdir -p /etc/nginx/ssl - 上传后设置私钥权限为
600:sudo chmod 600 /etc/nginx/ssl/your_domain.key - 确保属主为 Nginx 运行用户(如
www-data或nginx):sudo chown nginx:nginx /etc/nginx/ssl/*.key
配置 HTTPS 服务与强制跳转
一个完整的 HTTPS 配置包含两个 server 块:80 端口重定向 + 443 端口加密服务。建议分开写在站点配置文件中(如 /etc/nginx/sites-available/your-site)。
-
HTTP 跳转块(80 端口):
server {<br> listen 80;<br> server_name example.com www.example.com;<br> return 301 https://$host$request_uri;<br>} -
HTTPS 服务块(443 端口):
server {<br> listen 443 ssl http2;<br> server_name example.com www.example.com;<br> ssl_certificate /etc/nginx/ssl/example.com.crt;<br> ssl_certificate_key /etc/nginx/ssl/example.com.key;<br> ssl_trusted_certificate /etc/nginx/ssl/ca-bundle.crt;<br> ssl_protocols TLSv1.2 TLSv1.3;<br> ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;<br> ssl_prefer_server_ciphers off;<br> ssl_session_cache shared:SSL:10m;<br> ssl_session_timeout 10m;<br> add_header Strict-Transport-Security "max-age=31536000" always;<br>} - 其中
http2提升传输效率,Strict-Transport-Security告诉浏览器未来一年只走 HTTPS
验证与上线检查
配置完成后不能直接 reload,必须逐项确认有效性。
- 执行
sudo nginx -t检查语法;成功后运行sudo systemctl reload nginx生效 - 浏览器访问
https://your-domain,看地址栏是否显示锁图标,点击可查看证书信息 - 用 SSL Labs 测试工具 扫描域名,重点看“A+”评分、证书链完整性、协议与套件安全性
- 若提示“证书不受信任”,检查是否漏传中间证书;若页面加载异常,排查混合内容(HTTP 资源未改为 HTTPS)











