技术教程
11-22
要为 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 常见问题排查 Nginx 启动失败: 检查证书路径是否正确(ssl_certificate 和 ssl_certificate_key 路径是否存在)。 私钥文件权限是否为 600(执行 ls -l /etc/nginx/ssl/your_private.key 确认)。 查看错误日志定位问题:sudo tail -f /var/log/nginx/error.log。 证书无效(浏览器提示不安全): 确认证书是否匹配当前域名 / IP(证书绑定的域名必须与 server_name 一致)。 若使用自签名证书,浏览器会提示不安全,生产环境建议使用 Let's Encrypt 等权威机构的免费证书。 HTTPS 访问正常,但静态资源加载失败: 检查 Flask 代码中静态资源的引用路径是否为相对路径(如 /static/xxx.jpg),避免硬编码 http:// 导致混合内容错误。 完成以上步骤后,你的博客网站就可以通过 HTTPS 安全访问了,且所有 HTTP 请求会自动跳转至 HTTPS,提升访问安全性。