Nginx 反向代理配置 SSL 证书需要在 server 块中启用 listen 443 ssl 指令,并指定证书文件路径。适用场景为域名已解析且拥有有效证书,风险边界在于证书过期会导致服务不可用。
先说结论:Nginx 支持通过 ngx_http_ssl_module 模块终止 HTTPS 请求,并将解密后的流量反向代理给后端服务。
- 适合:需要对外提供 HTTPS 服务且后端服务不支持 SSL 的场景
- 先准备:已备案域名、有效的 SSL 证书文件(.crt/.pem)和私钥文件(.key)
- 验收:浏览器地址栏显示锁形图标且 curl 命令返回 HTTP 200 状态码
命令速用版
nginx -t
systemctl reload nginx为什么会这样
Nginx 作为反向代理服务器时,SSL 终止发生在 Nginx 层,后端服务接收的是 HTTP 明文流量。
这种架构能减轻后端服务的加密计算压力,同时统一在入口层管理证书。
分步处理
步骤 1:准备证书文件
将证书文件上传至服务器,例如 /etc/nginx/ssl/ 目录,确保权限仅限 root 读取。
步骤 2:修改 Nginx 配置
在 server 块中添加 listen 443 ssl 及证书路径配置。
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
location / {
proxy_pass http://backend_server;
}
}步骤 3:强制跳转 HTTPS(可选)
监听 80 端口并将请求 301 重定向至 443 端口。
怎么验证是否生效
使用 curl 命令检查响应头是否包含 Strict-Transport-Security 或状态码是否为 200。
curl -I https://example.com查看 Nginx 错误日志 /var/log/nginx/error.log 确认无 SSL 相关报错。
常见坑
证书路径填写错误会导致 Nginx 启动失败,配置变更前务必执行 nginx -t 测试。
防火墙未开放 443 端口会导致外部无法访问,需检查安全组规则。
混合内容警告是因为页面内资源仍通过 HTTP 加载,需将所有资源链接改为 HTTPS。
常见问题
如何自动续期 Let's Encrypt 证书?
使用 Certbot 工具配合 Nginx 插件可实现自动续期,需设置定时任务。
配置后浏览器仍显示不安全?
检查证书链是否完整,中间证书缺失会导致部分客户端不信任。
参考来源
Nginx 官方文档 - ngx_http_ssl_module
URL: https://nginx.org/en/docs/http/ngx_http_ssl_module.html