温馨提示×

nginx在centos上ssl配置教程

小樊
43
2025-12-09 14:35:29
栏目: 云计算

在 CentOS 上为 Nginx 配置 SSL 的完整教程

一 准备与前置检查

  • 准备已签发的 SSL 证书文件(常见为 Nginx 目录下的 .crt/.pem 证书文件.key 私钥文件),并确保证书域名与站点域名一致;若证书为“系统生成 CSR”,下载包通常包含多个服务器类型的目录,Nginx 使用其中的证书与密钥。若使用“自己生成 CSR”,请妥善保存本地私钥,下载包中不含 .key。
  • 服务器与云安全组需放行 TCP 443 端口,否则即使配置正确也无法访问 HTTPS。
  • 确认 Nginx 已安装并启用 http_ssl_module(多数发行包默认包含;从源码编译时需显式加入该模块)。
  • 域名已正确解析到服务器 IP,并可通过 http://域名 正常访问(便于后续 301 跳转)。

二 安装 Nginx 与启用 SSL 模块

  • 使用系统仓库安装(推荐):
    • 安装 EPEL 与 Nginx(部分系统可同时安装 mod_ssl,但对 Nginx 并非必需):
      • sudo yum install -y epel-release
      • sudo yum install -y nginx
  • 从源码编译安装(如需自定义路径或模块):
    • 安装编译依赖:sudo yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
    • 下载并解压 Nginx 源码,进入目录后配置并启用 SSL 模块:
      • ./configure --prefix=/usr/local/nginx --with-http_ssl_module
      • make && make install
  • 验证模块与版本:
    • nginx -V 2>&1 | grep – ‘–with-http_ssl_module’(应能看到该选项)

三 部署证书与配置 HTTPS

  • 准备证书目录并上传文件(示例将证书放在 /etc/nginx/cert/):
    • sudo mkdir -p /etc/nginx/cert
    • 将下载的 domain.crt/domain.pemdomain.key 上传至该目录,权限建议 600(仅 root 可读):
      • sudo chmod 600 /etc/nginx/cert/*
  • 编辑 Nginx 配置(两种常见做法,二选一或合并使用):
    • 方式 A:在 /etc/nginx/nginx.conf 的 http 块中新增 server 443(或取消注释 HTTPS 示例):
      • server { listen 443 ssl; server_name yourdomain.com www.yourdomain.com;

        ssl_certificate /etc/nginx/cert/domain.crt; ssl_certificate_key /etc/nginx/cert/domain.key;

        ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on;

        location / { root /usr/share/nginx/html; index index.html index.htm; } }

    • 方式 B:在 /etc/nginx/conf.d/ssl.conf 中单独放置 HTTPS server 配置,保持主配置简洁。
  • 可选:HTTP 自动跳转 HTTPS(在 80 端口 server 中):
    • server { listen 80; server_name yourdomain.com www.yourdomain.com; return 301 https://$host$request_uri; }
  • 说明:
    • 证书与密钥路径需与上传位置一致;证书文件扩展名可为 .crt/.pem;若使用“已有 CSR”申请,请确保 .key 文件已就位并命名为与证书匹配的 domain.key

四 验证与生效

  • 语法与配置检查:
    • sudo nginx -t
  • 重载或重启 Nginx:
    • sudo systemctl reload nginx(或 sudo systemctl restart nginx)
  • 访问验证与连通性检查:
    • 浏览器访问 https://yourdomain.com,应显示安全锁标识;命令行可测试:curl -I https://yourdomain.com
    • 检查端口监听:ss -tlnp | grep ‘:443’(应看到 0.0.0.0:443 或 :::443 处于 LISTEN)
    • 如仍无法访问,请再次确认云安全组/本机防火墙已放行 443

五 进阶与自动化

  • 使用 Certbot 自动获取并配置 Let’s Encrypt 证书(适用于公网域名):
    • 安装 Certbot 与 Nginx 插件(CentOS 7 常见为 python2-certbot-nginx,CentOS 8/Stream 可用 python3-certbot-nginx):
      • sudo yum install -y certbot python2-certbot-nginx
    • 获取并自动配置 Nginx:
      • sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
    • Certbot 会自动创建/修改 80/443 配置、设置 HTTP→HTTPS 跳转 并尝试自动续期(续期可用 systemctl 或 crontab 配合 certbot renew 完成)。
  • 安全与优化建议:
    • 优先启用 TLSv1.2/TLSv1.3,禁用 SSLv3/TLSv1/TLSv1.1;使用更安全的套件(如 ECDHE 系列),并开启 HSTS(在 server 443 中添加:add_header Strict-Transport-Security “max-age=63072000; includeSubDomains; preload”;)。
    • 定期使用 SSL Labs 等工具测试站点评分与配置安全性,并根据结果微调 ciphers 与协议。

0