You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

两台服务器部署Flask应用并配置CertBot SSL域名后,如何对接OCI负载均衡器实现流量均衡?

两台服务器部署Flask应用并配置CertBot SSL域名后,如何对接OCI负载均衡器实现流量均衡?

嗨,我来帮你搞定这个问题!你的核心困扰就是同一个子域名的SSL证书没法在两台服务器上重复申请,但又想把流量导到OCI负载均衡器来分摊到两台机器对吧?下面给你几个实用的解决方案,你可以根据自己的场景来选:

方案一:把SSL终止在OCI负载均衡器上(最推荐)

这个方案最省心,把SSL加密解密的工作交给负载均衡器来做,后端的两台Nginx服务器只需要处理HTTP请求就行,不用再维护各自的SSL证书。

步骤如下:

  1. 先拿到域名证书:你可以在任意一台服务器(比如ServerA)用Certbot正常申请test1.example.com的证书,之后把证书文件(fullchain.pem和privkey.pem)从/etc/letsencrypt/live/test1.example.com/目录里导出来。
  2. 上传证书到OCI负载均衡器:登录OCI控制台,找到你的负载均衡器,进入「证书管理」页面,把刚才导出的证书和私钥上传进去,创建一个SSL证书资源。
  3. 配置负载均衡器监听:给负载均衡器添加一个443端口的监听,绑定刚才上传的SSL证书,然后把流量转发到后端两台服务器的80端口(注意要在OCI安全组里开放负载均衡器到后端服务器80端口的访问权限)。
  4. 修改后端Nginx配置:把两台服务器上test1.example.com的Nginx配置里的SSL相关内容删掉,改成只监听80端口,比如:
    server {
      server_name   test1.example.com;
    
      location / {
        access_log  /var/log/nginx/test1/access.log;
        error_log  /var/log/nginx/test1/error.log;
        proxy_pass  http://localhost:8080;
      }
    
      listen 80;
    }
    
    同时可以把Certbot自动生成的重定向配置去掉,因为现在SSL终止在LB了。
  5. 修改域名解析:把test1.example.com的A记录改成指向OCI负载均衡器的公网IP,这样所有流量先到LB,再分摊到两台服务器。

方案二:共享Certbot证书到两台服务器

如果你不想改动负载均衡器的配置,还是想让后端Nginx处理SSL,那可以把ServerA上的证书同步到ServerB,并且保持自动更新。

步骤如下:

  1. 同步现有证书:用rsync工具把ServerA上的/etc/letsencrypt/目录同步到ServerB的对应位置,比如在ServerB上执行:
    rsync -avz user@ServerA:/etc/letsencrypt/ /etc/letsencrypt/
    
    记得要给ServerB的Nginx进程权限访问这些证书文件,比如确保nginx用户能读取/etc/letsencrypt/live/下的内容。
  2. 配置自动同步:因为Certbot的证书90天会过期,所以要设置定时任务(比如crontab),定期同步证书,并且同步后重新加载Nginx配置。比如在ServerA上设置任务,证书更新后自动推送到ServerB,或者在ServerB上定时拉取。
    另外也可以用OCI的文件存储服务(File Storage),把/etc/letsencrypt/目录挂载到两台服务器上,这样证书更新后两台机器都能自动获取到最新的文件。
  3. 配置负载均衡器:让负载均衡器监听443端口,直接转发流量到两台服务器的443端口(同样要开放安全组权限),然后把域名A记录指向LB的公网IP。

方案三:用DNS-01验证方式申请证书

Certbot默认的HTTP-01验证需要域名指向当前服务器才能通过,而DNS-01验证是通过在域名的DNS记录里添加一条TXT记录来完成验证,和服务器IP无关,所以可以在两台服务器上都申请同一个域名的证书。

步骤如下:

  1. 获取NameCheap的API密钥:登录NameCheap控制台,找到API设置,开启API访问权限,记录下API密钥和用户名。
  2. 在两台服务器上安装Certbot的DNS插件:安装certbot-dns-namecheap插件,这样Certbot可以自动添加DNS验证记录。
  3. 申请证书:在两台服务器上分别执行类似下面的命令申请证书:
    certbot certonly --dns-namecheap --dns-namecheap-credentials ~/.secrets/certbot/namecheap.ini -d test1.example.com
    
    其中namecheap.ini文件里要配置你的NameCheap API信息:
    dns_namecheap_api_key = YOUR_API_KEY
    dns_namecheap_username = YOUR_USERNAME
    dns_namecheap_propagation_seconds = 30
    
  4. 配置负载均衡器:和方案二一样,让LB转发443流量到两台服务器的443端口,域名指向LB的IP。

各方案优缺点对比

  • 方案一:最推荐,后端配置简单,不需要维护证书,性能也更好,LB专门做SSL终止更高效。
  • 方案二:适合不想改动现有Nginx配置的场景,但需要维护证书同步机制,有点麻烦。
  • 方案三:适合需要后端保持HTTPS的场景,但需要配置DNS API,操作相对复杂一点。

备注:内容来源于stack exchange,提问作者Mervin Hemaraju

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 13:13:08