插件窝 干货文章 nginx怎么设置ssl

nginx怎么设置ssl

Nginx SSL 证书 配置 851    来源:    2025-04-07

Nginx SSL 配置指南

在 Nginx 上设置 SSL/TLS 可以加密客户端与服务器之间的通信。以下是完整的 SSL 配置步骤:

前提条件

  1. 已安装 Nginx
  2. 拥有域名和服务器
  3. 已获取 SSL 证书(通常包括 .crt.key 文件)

基本 SSL 配置步骤

1. 上传证书文件

将你的证书文件上传到服务器,通常放在 /etc/nginx/ssl/ 目录下: - 证书文件:your_domain.crtyour_domain.pem - 私钥文件:your_domain.key - 中间证书(如果有):intermediate.crt

2. 配置 Nginx

编辑你的 Nginx 配置文件(通常在 /etc/nginx/sites-available/your_site):

server {
    listen 443 ssl;
    server_name yourdomain.com www.yourdomain.com;

    # SSL 证书配置
    ssl_certificate /etc/nginx/ssl/yourdomain.crt;
    ssl_certificate_key /etc/nginx/ssl/yourdomain.key;

    # 如果使用中间证书,需要合并证书
    # ssl_certificate /etc/nginx/ssl/yourdomain-chained.crt;

    # SSL 协议配置
    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:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;

    # 会话缓存设置
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    # 其他配置
    root /var/www/html;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

# HTTP 重定向到 HTTPS
server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    return 301 https://$host$request_uri;
}

3. 高级 SSL 配置选项

# OCSP Stapling 配置
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

# HSTS 头(强制 HTTPS)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";

# DH 参数(增强安全性)
ssl_dhparam /etc/nginx/ssl/dhparam.pem;

要生成 dhparam 文件:

openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

4. 测试并重启 Nginx

测试配置是否正确:

sudo nginx -t

如果测试通过,重启 Nginx:

sudo systemctl restart nginx

验证 SSL 配置

  1. 使用浏览器访问 https://yourdomain.com,检查是否有安全锁标志
  2. 使用 SSL 测试工具如 SSL Labs 进行完整测试

常见问题解决

  1. 证书链不完整:确保中间证书已正确包含
  2. 私钥不匹配:确认证书和私钥是配对的
  3. 权限问题:确保 Nginx 用户有读取证书文件的权限
  4. 协议过时:禁用 SSLv3 和 TLSv1.0/TLSv1.1

证书自动续期(Let's Encrypt)

如果使用 Let's Encrypt 证书,可以安装 certbot 自动续期:

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

设置自动续期:

sudo certbot renew --dry-run

以上配置将为你提供一个安全、高性能的 HTTPS 站点。根据你的具体需求,可能需要调整某些参数。