DukeDuke
主页
文档转换
关于我们
主页
文档转换
关于我们
  • Linux 系统

    • Linux 系统管理
    • Linux 网络管理
    • Linux 文件管理
    • Linux 命令大全
  • Nginx Web 服务器

    • Nginx 安装 与 配置
    • Nginx 负载均衡
    • Nginx SSL证书配置
    • Nginx Keepalived 高可用
  • Docker 容器

    • Docker 简介
    • Docker 安装与配置
    • Docker 命令
    • Docker 部署 Nginx
    • Docker 部署 MySQL
    • Docker 部署 Redis
  • 服务器

    • 塔式服务器
    • 机架式服务器
    • 刀片服务器
  • Git 版本控制
  • Jenkins 持续集成
  • Jmeter 性能测试
  • Let's Encrypt 免费SSL证书

Nginx SSL 证书配置

目录

  • SSL 证书简介
  • 获取 SSL 证书
  • Nginx SSL 配置
  • SSL 配置最佳实践
  • 常见问题排查
  • Let's Encrypt 配置案例

SSL 证书简介

SSL(Secure Sockets Layer)证书是一种数字证书,用于在客户端和服务器之间建立加密连接。使用 SSL 证书可以:

1. 数据安全保护

  • 加密传输数据,防止数据被窃听
  • 确保数据完整性,防止数据被篡改
  • 保护敏感信息(如密码、信用卡号等)

2. 身份认证

  • 验证网站的真实身份
  • 防止钓鱼网站和中间人攻击
  • 建立用户对网站的信任

3. 合规性要求

  • 符合 PCI DSS 支付卡行业数据安全标准
  • 满足 GDPR 等数据保护法规要求
  • 符合现代浏览器的安全标准

4. 技术优势

  • 支持 HTTP/2 协议
  • 提升网站 SEO 排名(搜索引擎优先收录 HTTPS 网站)
  • 支持现代浏览器的高级功能

5. 用户体验

  • 浏览器地址栏显示安全锁标识
  • 提升用户对网站的信任度
  • 避免浏览器显示不安全警告

6. 业务价值

  • 保护品牌声誉
  • 提高用户转化率
  • 降低数据泄露风险
  • 增强竞争优势

Let's Encrypt 配置案例

1. 安装 Certbot

# Ubuntu/Debian
sudo apt update
sudo apt install certbot python3-certbot-nginx

# CentOS/RHEL
sudo yum install epel-release
sudo yum install certbot python3-certbot-nginx

2. 配置 Nginx 虚拟主机

# /etc/nginx/conf.d/example.com.conf
server {
    listen 80;
    server_name example.com www.example.com;

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

3. 获取 SSL 证书

# 自动配置 Nginx
sudo certbot --nginx -d example.com -d www.example.com

# 仅获取证书(手动配置)
sudo certbot certonly --nginx -d example.com -d www.example.com

4. 自动续期配置

# 测试自动续期
sudo certbot renew --dry-run

# 添加定时任务
sudo crontab -e

# 添加以下内容(每天凌晨 2:30 检查续期)
30 2 * * * /usr/bin/certbot renew --quiet

5. 完整的 Nginx SSL 配置示例

# /etc/nginx/conf.d/example.com.conf
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}

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

    # SSL 配置
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    # 优化 SSL 配置
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;

    # 现代配置
    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:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    # HSTS 配置
    add_header Strict-Transport-Security "max-age=63072000" always;

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

    # 网站根目录
    root /var/www/example.com;
    index index.html;

    # 日志配置
    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;

    # 安全相关头部
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header Referrer-Policy "no-referrer-when-downgrade" always;
    add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
}

6. 验证配置

# 检查 Nginx 配置
sudo nginx -t

# 重新加载 Nginx
sudo systemctl reload nginx

# 测试 SSL 配置
curl -vI https://example.com

7. 故障排除

  1. 证书获取失败

    • 确保域名已正确解析到服务器
    • 检查 80 端口是否开放
    • 查看 Certbot 日志:sudo certbot --logs
  2. 自动续期失败

    • 检查 Certbot 定时任务:sudo crontab -l
    • 查看续期日志:sudo certbot renew --logs
  3. Nginx 配置错误

    • 检查证书路径是否正确
    • 确认文件权限:sudo ls -l /etc/letsencrypt/live/
    • 查看 Nginx 错误日志

8. 安全建议

  1. 定期更新 Certbot 和 Nginx
  2. 监控证书过期时间
  3. 配置防火墙规则
  4. 定期备份证书和配置
  5. 使用强密码保护私钥
最近更新:: 2026/4/17 13:21
Contributors: Duke
Prev
Nginx 负载均衡
Next
Nginx Keepalived 高可用