Skip to content

Nginx SSL 配置

在现代 Web 应用中,启用 HTTPS 已经是标配。 Nginx 作为常见的 Web 服务器,可以通过 SSL/TLS 配置实现加密通信,保护用户数据安全,同时提升网站可信度。


🔧 准备工作

  1. 获取 SSL 证书

  2. 证书文件

    • 通常包含:

      • cert.pem / fullchain.pem:证书文件
      • privkey.pem:私钥文件
  3. 确认 Nginx 已支持 SSL

    bash
    nginx -V 2>&1 | grep -o with-http_ssl_module

    如果有输出 with-http_ssl_module,说明已支持 SSL 模块。


🚀 基本配置

nginx
server {
    listen 443 ssl;
    server_name www.example.com;

    ssl_certificate     /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        root /var/www/html;
        index index.html;
    }
}

🔁 HTTP 自动跳转 HTTPS

nginx
server {
    listen 80;
    server_name www.example.com;
    return 301 https://$host$request_uri;
}

这样所有 http:// 请求都会跳转到 https://


🔒 推荐优化配置

1. 只启用安全协议

nginx
ssl_protocols TLSv1.2 TLSv1.3;

2. 安全加密套件

nginx
ssl_ciphers EECDH+AESGCM:EECDH+CHACHA20:!aNULL;
ssl_prefer_server_ciphers on;

3. 开启会话缓存

nginx
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1h;

4. HSTS(强制使用 HTTPS)

nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

🔐 Let’s Encrypt 自动化

推荐使用 Certbot 工具自动申请和续期 SSL 证书。

安装:

bash
sudo apt install certbot python3-certbot-nginx

申请证书:

bash
sudo certbot --nginx -d example.com -d www.example.com

测试自动续期:

bash
sudo certbot renew --dry-run

🛠️ 常见问题

  1. 浏览器提示证书不安全

    • 确认使用的是正规 CA 颁发的证书
    • 确认证书链完整(fullchain.pem)
  2. Nginx 启动报错 "SSL: error:0909006C"

    • 检查证书文件和私钥是否匹配
  3. HTTP 访问未跳转到 HTTPS

    • 确认是否配置了 return 301 https://... 规则

🚦 应用场景

  • 网站全站 HTTPS
  • 接口服务加密传输
  • 配合 反向代理 / 负载均衡,提升安全性
  • 限流 / 缓存 一起,构建高性能安全网关

🔗 参考资料

Released under the MIT License.