从域名解析到 Nginx 部署:全链路 HTTPS 配置实战(含安全组避坑)

0 阅读5分钟

下面我将以最主流的 Nginx 服务器 + Linux 系统 + 免费 SSL 证书 为例,带你走通全流程。

📋 核心流程概览

  1. 域名准备:购买与实名认证。
  2. DNS 解析:将域名指向服务器 IP。
  3. 环境准备:云服务器安全组放行端口。
  4. 证书获取:申请 SSL 证书(获取 .crt.key 文件)。
  5. Nginx 配置:部署证书并开启 HTTPS。
  6. 验证与跳转:确保 HTTP 自动跳转至 HTTPS。

第一步:域名准备与 DNS 解析

在配置服务器之前,必须确保你的域名已经指向了你的云服务器公网 IP。

  1. 域名购买与备案
    • 在国内服务器(如阿里云、腾讯云)上,域名必须完成 ICP 备案 才能正常解析访问。
    • 完成实名认证。
  2. 添加 DNS 解析记录
    • 登录你的域名服务商控制台(DNS 管理)。
    • 添加一条 A 记录
    • 主机记录:填 @(代表主域名)或 www
    • 记录值:填写你云服务器的 公网 IP 地址
    • TTL:默认即可(通常 10 分钟)。
    • 验证方法:在电脑终端输入 ping 你的域名,如果返回的是你的服务器 IP,说明解析生效。

第二步:云服务器安全组放行 (关键)

很多时候配置好了却无法访问,都是因为云厂商的“防火墙”(安全组)没开。

  1. 登录云服务器控制台(如阿里云 ECS 或腾讯云 CVM)。
  2. 找到 安全组 配置。
  3. 放行以下端口
    • 80 端口 (TCP):用于 HTTP 访问,也是申请免费证书时验证域名所有权的必经之路。
    • 443 端口 (TCP):用于 HTTPS 加密访问。
  4. 注意:如果你服务器内部开启了防火墙(如 firewalldufw),也需要在系统内部放行这两个端口。

第三步:申请 SSL 证书

你有两种主流方式获取证书,推荐使用 方式 A(云厂商控制台申请),文件管理更直观。

方式 A:云厂商控制台申请(推荐)

阿里云、腾讯云等每年提供 20 个免费的单域名证书(有效期通常为 3 个月或 1 年,视政策而定)。

  1. 进入云控制台的“SSL 证书”或“数字证书管理服务”页面。
  2. 点击 申请免费证书
  3. 填写域名,选择 DNS 验证(系统会自动检测你的 DNS 解析,或者让你手动添加一条 TXT 记录)。
  4. 审核通过后(通常几分钟),在证书列表点击 下载
  5. 选择 Nginx 服务器类型下载。
    • 解压后你会得到两个关键文件:
      • .crt.pem 文件(公钥,包含证书链)。
      • .key 文件(私钥)。

方式 B:使用 Certbot 在服务器上直接申请

如果你习惯命令行,可以使用 Let's Encrypt 的 Certbot 工具,它会自动处理验证和续期。

  • 安装:sudo apt install certbot python3-certbot-nginx (Ubuntu)
  • 命令:sudo certbot --nginx -d yourdomain.com
  • 注:Certbot 会自动帮你修改 Nginx 配置,如果成功,可以直接跳到第六步验证。

第四步:上传证书到服务器

如果你使用的是 方式 A,需要将下载好的证书上传到服务器。

  1. 在服务器上创建目录:
    sudo mkdir -p /etc/nginx/ssl/
    
  2. 使用 SFTP 工具(如 Xftp, FinalShell)或 scp 命令,将下载的 .crt (或 .pem) 和 .key 文件上传到该目录。

第五步:Nginx 配置与部署

这是核心环节,我们需要修改 Nginx 配置文件来“接管” HTTPS 流量。

  1. 打开 Nginx 配置文件(通常在 /etc/nginx/conf.d//etc/nginx/sites-available/ 下):

    sudo vim /etc/nginx/conf.d/your_domain.conf
    
  2. 复制并修改以下配置(请替换你的域名和证书路径):

    # 1. 强制 HTTP 跳转到 HTTPS (监听 80 端口)
    server {
        listen 80;
        server_name yourdomain.com www.yourdomain.com; # 替换为你的域名
        # 301 重定向,确保所有流量都走加密通道
        return 301 https://$server_name$request_uri;
    }
    
    # 2. HTTPS 配置 (监听 443 端口)
    server {
        listen 443 ssl http2; # 开启 http2 提升性能
        server_name yourdomain.com www.yourdomain.com;
    
        # --- SSL 证书配置 ---
        # 指向刚才上传的证书文件路径
        ssl_certificate /etc/nginx/ssl/your_domain.crt;  # .crt 或 .pem
        ssl_certificate_key /etc/nginx/ssl/your_domain.key;
    
        # --- 安全优化 (可选) ---
        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 off;
    
        # --- 你的网站业务配置 ---
        root /var/www/html; # 你的网站文件路径
        index index.html index.htm;
    
        location / {
            try_files $uri $uri/ /index.html; # 适配 Vue/React 等单页应用
        }
        
        # 如果是反向代理后端 API,可配置:
        # location /api/ {
        #     proxy_pass http://127.0.0.1:3000;
        #     proxy_set_header Host $host;
        # }
    }
    
  3. 验证并重载配置

    • 先检查配置是否有语法错误:
      sudo nginx -t
      
    • 如果显示 syntax is ok,则重载 Nginx 使其生效:
      sudo nginx -s reload
      # 或者
      sudo systemctl reload nginx
      

第六步:最终验证

  1. 浏览器访问:输入 https://你的域名
  2. 检查锁头图标:地址栏应显示一把锁,点击可查看证书信息,显示“连接是安全的”。
  3. 自动跳转测试:尝试输入 http://你的域名(不带 s),看是否会自动变成 https://

💡 常见问题排查

问题现象可能原因解决方案
浏览器提示“连接不安全”证书未生效或配置错误检查 .crt.key 路径是否正确,文件内容是否完整。
无法访问 443 端口安全组未放行再次检查云服务器控制台的“安全组”规则,确保 TCP 443 允许入站。
证书过期免费证书有效期短阿里云/腾讯云免费证书通常 3 个月一签,需设置提醒手动续期;或使用 Certbot 自动续期。
混合内容警告页面内引用了 HTTP 资源检查网页代码(HTML/CSS/JS),将所有 http:// 的资源链接改为 https:////