基于本文回答

播面 播面

刷题像听歌,多听自然懂
0
评论

如何在 Nginx 中配置 SSL/TLS 证书以实现完整的 HTTPS 访问?

在 Nginx 中配置 SSL/TLS 证书以实现完整的 HTTPS 访问,通常需要完成以下几个核心步骤:准备证书、配置 Nginx 监听 443 端口、强制 HTTP 重定向到 HTTPS,以及优化安全配置。

以下是详细的操作指南:

第一步:准备 SSL/TLS 证书

你需要两个主要文件:

  1. 证书文件(通常以 .crt.pem 结尾,包含公钥和证书链)。
  2. 私钥文件(通常以 .key 结尾)。

如果你还没有证书,推荐使用 Let's Encrypt (Certbot) 免费申请(见文末简易自动化方法)。如果有购买的商业证书,请将它们上传到服务器(建议放在 /etc/nginx/ssl/ 目录下)。


第二步:配置 Nginx (完整示例)

打开你的 Nginx 站点配置文件(通常位于 /etc/nginx/conf.d/你的域名.conf/etc/nginx/sites-available/你的域名)。

将配置修改为以下结构:

plaintext
# 1. 强制 HTTP 重定向到 HTTPS (监听 80 端口)
server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com; # 替换为你的域名

    # 将所有 HTTP 请求 301 永久重定向到 HTTPS
    return 301 https://$host$request_uri;
}

# 2. HTTPS 服务器配置 (监听 443 端口)
server {
    listen 443 ssl http2; # 开启 SSL 和 HTTP/2 (提升性能)
    server_name yourdomain.com www.yourdomain.com; # 替换为你的域名

    # 网站根目录和首页文件
    root /var/www/html; 
    index index.html index.php;

    # ================= 核心 SSL 配置 =================
    # 证书文件路径
    ssl_certificate /etc/nginx/ssl/yourdomain.pem; 
    # 私钥文件路径
    ssl_certificate_key /etc/nginx/ssl/yourdomain.key; 

    # ================= 安全优化配置 (推荐) =================
    # 仅启用安全的 TLS 版本 (禁用不安全的 SSLv3, TLS 1.0, 1.1)
    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 on; # 优先使用服务器的加密套件

    # 开启 SSL 会话缓存 (提升 HTTPS 连接性能)
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;

    # 开启 HSTS (HTTP Strict Transport Security) - 强制浏览器使用 HTTPS
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

    # ================= 正常的路由配置 =================
    location / {
        try_files $uri $uri/ =404;
    }
}

第三步:检查并重启 Nginx

在修改配置文件后,务必先测试语法,防止配置错误导致服务器宕机。

  1. 测试 Nginx 配置:

    bash
    sudo nginx -t

    如果显示 syntax is oktest is successful,则继续。

  2. 重载 Nginx 应用配置:

    bash
    sudo systemctl reload nginx
    # 或者使用 sudo nginx -s reload

💡 附:最简单的自动化方案(使用 Certbot)

如果你还没有证书,强烈建议使用 Let's Encrypt 的官方工具 Certbot。它可以自动申请证书、自动修改 Nginx 配置文件、自动实现 HTTP 重定向、并自动配置安全最佳实践

操作步骤(以 Ubuntu/Debian 为例):

  1. 确保你的 Nginx 已经配置好了 80 端口,且 server_name 写对了你的域名,域名也已经正确解析到该服务器 IP。
  2. 安装 Certbot:
    bash
    sudo apt update
    sudo apt install certbot python3-certbot-nginx
  3. 运行 Certbot:
    bash
    sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
  4. 根据终端提示操作,当询问是否重定向 HTTP 到 HTTPS 时,选择 Redirect(重定向)。
  5. 完成!Certbot 会自动帮你配置好证书,并且配置自动续期(证书有效期 90 天,Certbot 会在后台自动更新)。

常见问题排查

  • 无法访问 HTTPS? 检查服务器防火墙(如 ufw, iptables)或云服务商的安全组(阿里云/腾讯云/AWS),确保 443 端口已对外开放。
  • 浏览器提示“不安全”? 确保证书没有过期,且域名与证书绑定的域名完全一致;确保证书链完整(提供了 .pem 格式的包含中间证书的文件)。
  • 页面加载不完整(混合内容错误)? 如果你的网页代码中写死了 http://... 加载图片、JS 或 CSS 文件,浏览器会拦截这些资源。请将代码中的资源链接改为相对路径(如 /img/logo.png)或 https://...
00:00
00:00