VPS 网站 SSL 证书自动化与 Nginx 反向代理实战:acme.sh 配置、Cloudflare CDN 联动与源站防泄露

为 Linux VPS 搭建现代化安全 Web 架构:使用 acme.sh 配合 Cloudflare DNS API 零宕机全自动签发与续期 ECC-SSL 证书,结合 Nginx 反向代理最佳配置与源站真实 IP 防泄露加固。

VPS 网站 SSL 证书自动化与 Nginx 反向代理实战:acme.sh 配置、Cloudflare CDN 联动与源站防泄露

在生产建站和轻量后端服务部署中,实现稳健的VPS 网站 SSL 证书自动化与反向代理架构是保障站点安全与高可用的第一道防线。许多开发者因证书过期停机、Nginx 配置不当导致源站真实 IP 泄露,从而遭到恶意扫盘或 DDoS 穿透攻击。

本文基于现代安全标准,指导你使用开源神器 acme.sh 配合 DNS API 自动管理 ECC (Prime256v1) 证书,并在 Nginx 反向代理中联动 Cloudflare CDN,配合此前介绍的 Docker 小内存/小硬盘 VPS 规范运维 与 Linux VPS 开启 BBRv3 / BBR 拥塞控制调优实战,构建严密的建站网络边界。


一、使用 acme.sh 实现证书零宕机自动签发

相比传统的 Certbot HTTP 验证,通过 DNS API 进行 DNS-01 挑战无需开放外部 HTTP 端口,即使源站藏在 CDN 之后也能无缝续期:

# 1. 一键安装 acme.sh 并配置通知邮箱
curl https://get.acme.sh | sh -s [email protected]
source ~/.bashrc

# 2. 设置 Cloudflare API 令牌(或腾讯云/阿里云 DNS 密钥)
export CF_Token="your_cloudflare_api_token"
export CF_Zone_ID="your_zone_id"

# 3. 申请强效现代 ECC 证书(零交互,自动配置 DNS TXT 记录)
acme.sh --issue --dns dns_cf -d example.com -d "*.example.com" --keylength ec-256

二、Nginx 生产级安全反向代理配置

证书签发后,切勿直接引用 ~/.acme.sh/ 目录中的临时文件,应使用 --install-cert 命令将证书分发至安全目录并触发 Nginx 重载:

# 安装证书到生产系统目录
acme.sh --install-cert -d example.com --ecc \
  --key-file       /etc/nginx/ssl/example.com.key  \
  --fullchain-file /etc/nginx/ssl/example.com.cer \
  --reloadcmd     "systemctl reload nginx"

Nginx 反向代理核心配置模板

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/example.com.cer;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;

    # 严格安全响应头(启用 HSTS 与防嗅探)
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Content-Type-Options "nosniff" always;

    location / {
        proxy_pass http://127.0.0.1:8080; # 后端 Docker 或服务容器端口
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        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;
    }
}

三、Cloudflare CDN 联动与源站真实 IP 防泄露

启用 CDN 代理(小黄云)后,必须关闭直接通过 IP 访问的能力,防止网络爬虫或扫描器探测到母机真实 IP:

  1. 配置默认 Default Server 丢弃请求: nginx server { listen 80 default_server; listen 443 ssl default_server; ssl_reject_handshake on; # Nginx 1.19.4+ 支持拒绝未指定域名的握手 return 444; # 非法 Host 直接掐断 TCP 连接 }
  2. UFW 防火墙仅放行 Cloudflare 节点:通过防火墙规则,限制公网仅允许 Cloudflare 官方公布的 IPv4/IPv6 网段访问 80/443 端口,彻底免疫直连扫盘。结合 VPS 自动化灾备实战:Rclone 加密备份,确保源站数据与配置双重安全。

四、排错与运维检查清单

  • [ ] crontab 定时任务验证:确认 crontab -l 中存在 acme.sh --cron 自动检查进程。
  • [ ] 证书过期状态模拟:运行 acme.sh --cron --force 演练证书签发与 Nginx 平滑热重载。
  • [ ] 真实客户端 IP 获取:检查后端应用日志,确认 X-Forwarded-For 显示的是真实访客 IP 而非 CDN 节点 IP。
  • [ ] 端口安全审查:除 SSH 与必需的 Web 端口外,关闭所有数据库与内部调试端口对外直接暴露。

常见问答 FAQ

1. acme.sh 默认签发的是 ZeroSSL 还是 Let's Encrypt?

acme.sh 目前默认证书提供商为 ZeroSSL。如果你希望切换回 Let's Encrypt,可运行 acme.sh --set-default-ca --server letsencrypt 即可全局切换。

2. 网站开启 Cloudflare CDN 后提示“重定向过多 (ERR_TOO_MANY_REDIRECTS)”?

这是由于 Cloudflare 仪表盘中的 SSL/TLS 加密模式被设置成了 Flexible(CDN 到源站走明文 HTTP),而源站 Nginx 又开启了强制跳转 HTTPS 造成的循环重定向。在 Cloudflare 后台将加密模式修改为 Full 或 Full (Strict) 即可秒级解决。

评论