温馨提示×

nginx在centos上ssl安装步骤

小樊
31
2025-12-05 15:33:12
栏目: 云计算

在 CentOS 上为 Nginx 安装与启用 SSL 的完整步骤


一 准备与前置检查

  • 确保证书已签发并下载了适用于 Nginx 的证书文件(常见为 .crt/.pem 证书与 .key 私钥),若下载包内只有证书而无私钥,说明申请时使用了已有 CSR,需使用本地保存的私钥进行部署。将证书与私钥上传至服务器安全目录,例如 /etc/ssl/cert/
  • 开放防火墙与安全组端口 443/TCP,否则即使配置完成也无法访问 HTTPS。
  • 确认 Nginx 已安装并包含 http_ssl_module 模块,可执行:nginx -V 2>&1 | grep – ‘–with-http_ssl_module’;若未包含,需要重新编译安装或安装带 SSL 模块的版本。
  • 域名已完成 ICP 备案(中国内地服务器)且 DNS A 记录已解析到服务器公网 IP。
  • 多服务器场景需对每台服务器分别部署同一证书;证书域名需与实际访问域名一一匹配。

二 方式一 手动部署已有或购买的 SSL 证书

  • 准备证书与目录
    • 证书与私钥路径示例:
      • 证书:/etc/ssl/cert/your_domain.pem(也可能是 .crt
      • 私钥:/etc/ssl/cert/your_domain.key
    • 建议权限:私钥仅对 root 可读:chmod 600 /etc/ssl/cert/*.key
  • 编辑 Nginx 配置(/etc/nginx/conf.d/ssl.conf 或 /etc/nginx/nginx.conf 的 http 块内新增 server 块)
    • 示例:
      server {
          listen 443 ssl http2;
          server_name your_domain.com www.your_domain.com;
      
          ssl_certificate     /etc/ssl/cert/your_domain.pem;
          ssl_certificate_key /etc/ssl/cert/your_domain.key;
      
          ssl_session_cache shared:SSL:1m;
          ssl_session_timeout 5m;
          ssl_protocols TLSv1.2 TLSv1.3;
          ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
          ssl_prefer_server_ciphers on;
      
          # 可选:开启 HSTS(谨慎评估后使用)
          # add_header Strict-Transport-Security "max-age=63072000" always;
      
          root /var/www/html;
          index index.html;
      
          location / {
              try_files $uri $uri/ =404;
          }
      }
      
      # HTTP 自动跳转 HTTPS
      server {
          listen 80;
          server_name your_domain.com www.your_domain.com;
          return 301 https://$host$request_uri;
      }
      
  • 检查配置并生效
    • 语法检查:nginx -t
    • 重载或重启:systemctl reload nginx 或 systemctl restart nginx
  • 说明
    • 若证书包内同时包含 中间证书,请将中间证书内容拼接在域名证书之后,保存为同一 .pem 文件再配置(多数厂商的 Nginx 包已提供合并好的文件)。

三 方式二 使用 Let’s Encrypt 与 Certbot 自动获取并配置

  • 安装 Certbot 与 Nginx 插件
    • CentOS 7/8(EPEL):sudo yum install epel-release && sudo yum install certbot python2-certbot-nginx
    • CentOS 8/Stream 或已启用 Python 3 的镜像:sudo yum install certbot python3-certbot-nginx
  • 获取并自动配置证书
    • 单域名:sudo certbot --nginx -d your_domain.com
    • 多域名:sudo certbot --nginx -d your_domain.com -d www.your_domain.com
    • 按提示选择是否重定向 HTTP→HTTPS,Certbot 会自动修改 Nginx 配置并重启服务。
  • 自动续期
    • 测试续期:sudo certbot renew --dry-run
    • 证书有效期 90 天,建议保持系统时间正确并启用定时续期(Certbot 默认会创建 systemd 定时器或 cron 任务)。

四 验证与常见问题排查

  • 访问验证
    • 浏览器访问 https://your_domain.com,确认地址栏显示锁形图标;可用 SSL Labs 在线检测配置强度。
  • 配置与端口检查
    • 语法:nginx -t;服务状态:systemctl status nginx
    • 端口连通:ss -tlnp | grep ‘:443’;云服务器安全组与系统防火墙需放行 443/TCP
  • 域名与证书匹配
    • 证书必须覆盖实际访问的域名(含 www 或不带 www);通配符 *.example.com 仅匹配一级子域名,不匹配根域名 example.com 与多级子域名。
  • 私钥与权限
    • 确保 .key 文件存在且权限为 600,否则 Nginx 启动会失败或报错。
  • 模块与编译
    • 若 nginx -V 未显示 –with-http_ssl_module,需安装带 SSL 模块的 Nginx 或重新编译。

0