要为 Nginx 配置 HTTPS(SSL),只需在现有反向代理配置的基础上添加 SSL 相关参数,并指定证书文件路径即可。以下是详细步骤:

前提:准备 SSL 证书文件
假设你的 SSL 证书文件已上传到服务器,通常包含两个文件:
证书文件(如 xxx.crt 或 xxx.pem,包含公钥)
私钥文件(如 xxx.key,包含私钥,需妥善保管,权限设为 600)

建议将证书文件统一放在 Nginx 配置目录下(方便管理):

# 创建证书存放目录

sudo mkdir -p /etc/nginx/ssl

# 假设证书文件在当前目录,移动到 ssl 目录(替换文件名)

sudo cp your_cert.crt /etc/nginx/ssl/

sudo cp your_private.key /etc/nginx/ssl/

# 设置私钥文件权限(必须,否则 Nginx 启动失败)

sudo chmod 600 /etc/nginx/ssl/your_private.key

 

步骤 1:修改 Nginx 配置文件(支持 HTTPS)

编辑你的反向代理配置文件 proxy.conf

sudo vim /etc/nginx/conf.d/proxy.conf

完整配置示例(替换为你的信息)

# 强制 HTTP 跳转 HTTPS(推荐,所有 HTTP 请求自动转到 HTTPS)
server {
    listen 80;
    server_name 47.103.77.91;  # 你的服务器 IP 或域名
    # 永久重定向到 HTTPS
    return 301 https://$host$request_uri;
}

# HTTPS 主配置(监听 443 端口)
server {
    listen 443 ssl;
    server_name 47.103.77.91;  # 与上面一致

    # SSL 证书配置(替换为你的证书路径)
    ssl_certificate /etc/nginx/ssl/your_cert.crt;         # 证书文件路径
    ssl_certificate_key /etc/nginx/ssl/your_private.key;  # 私钥文件路径

    # SSL 优化配置(提升安全性和性能)
    ssl_protocols TLSv1.2 TLSv1.3;  # 仅支持安全的 TLS 版本
    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_session_cache shared:SSL:10m;  # 启用 SSL 会话缓存
    ssl_session_timeout 10m;  # 会话超时时间

    # 静态资源由 Nginx 直接处理(可选,提升性能)
    location /static/ {
        root /var/www/blog;  # Flask 项目根目录(static 文件夹所在路径)
        expires 7d;
        add_header Cache-Control "public, max-age=604800";
    }

    # 反向代理到 Flask 服务(8888 端口)
    location / {
        proxy_pass http://127.0.0.1:8888;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;  # 传递 HTTPS 协议标识
    }
}

 

步骤 2:验证配置并重启 Nginx

1.测试配置语法(必须通过,否则重启失败):

sudo nginx -t

若提示 syntax is ok 和 test is successful,说明配置正确。

2.重启 Nginx 生效

sudo systemctl restart nginx

 

步骤 3:开放 443 端口(HTTPS 默认端口)

如果服务器启用了防火墙(如 firewalld),需开放 443 端口:

# 开放 443 端口(永久生效)

sudo firewall-cmd --add-port=443/tcp --permanent

# 重新加载防火墙规则

sudo firewall-cmd --reload

验证 HTTPS 是否生效

浏览器访问 https://47.103.77.91,地址栏应显示小锁图标(表示证书有效)。

检查是否自动跳转:访问 http://47.103.77.91 应自动跳转到 https://47.103.77.91

常见问题排查

  1. Nginx 启动失败

    • 检查证书路径是否正确(ssl_certificate 和 ssl_certificate_key 路径是否存在)。
    • 私钥文件权限是否为 600(执行 ls -l /etc/nginx/ssl/your_private.key 确认)。
    • 查看错误日志定位问题:sudo tail -f /var/log/nginx/error.log
  2. 证书无效(浏览器提示不安全)

    • 确认证书是否匹配当前域名 / IP(证书绑定的域名必须与 server_name 一致)。
    • 若使用自签名证书,浏览器会提示不安全,生产环境建议使用 Let's Encrypt 等权威机构的免费证书。
  3. HTTPS 访问正常,但静态资源加载失败

    • 检查 Flask 代码中静态资源的引用路径是否为相对路径(如 /static/xxx.jpg),避免硬编码 http:// 导致混合内容错误。
  4. 完成以上步骤后,你的博客网站就可以通过 HTTPS 安全访问了,且所有 HTTP 请求会自动跳转至 HTTPS,提升访问安全性。