两台服务器部署Flask应用并配置CertBot SSL域名后,如何对接OCI负载均衡器实现流量均衡?
两台服务器部署Flask应用并配置CertBot SSL域名后,如何对接OCI负载均衡器实现流量均衡?
嗨,我来帮你搞定这个问题!你的核心困扰就是同一个子域名的SSL证书没法在两台服务器上重复申请,但又想把流量导到OCI负载均衡器来分摊到两台机器对吧?下面给你几个实用的解决方案,你可以根据自己的场景来选:
方案一:把SSL终止在OCI负载均衡器上(最推荐)
这个方案最省心,把SSL加密解密的工作交给负载均衡器来做,后端的两台Nginx服务器只需要处理HTTP请求就行,不用再维护各自的SSL证书。
步骤如下:
- 先拿到域名证书:你可以在任意一台服务器(比如ServerA)用Certbot正常申请
test1.example.com的证书,之后把证书文件(fullchain.pem和privkey.pem)从/etc/letsencrypt/live/test1.example.com/目录里导出来。 - 上传证书到OCI负载均衡器:登录OCI控制台,找到你的负载均衡器,进入「证书管理」页面,把刚才导出的证书和私钥上传进去,创建一个SSL证书资源。
- 配置负载均衡器监听:给负载均衡器添加一个443端口的监听,绑定刚才上传的SSL证书,然后把流量转发到后端两台服务器的80端口(注意要在OCI安全组里开放负载均衡器到后端服务器80端口的访问权限)。
- 修改后端Nginx配置:把两台服务器上
test1.example.com的Nginx配置里的SSL相关内容删掉,改成只监听80端口,比如:
同时可以把Certbot自动生成的重定向配置去掉,因为现在SSL终止在LB了。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; } - 修改域名解析:把
test1.example.com的A记录改成指向OCI负载均衡器的公网IP,这样所有流量先到LB,再分摊到两台服务器。
方案二:共享Certbot证书到两台服务器
如果你不想改动负载均衡器的配置,还是想让后端Nginx处理SSL,那可以把ServerA上的证书同步到ServerB,并且保持自动更新。
步骤如下:
- 同步现有证书:用
rsync工具把ServerA上的/etc/letsencrypt/目录同步到ServerB的对应位置,比如在ServerB上执行:
记得要给ServerB的Nginx进程权限访问这些证书文件,比如确保rsync -avz user@ServerA:/etc/letsencrypt/ /etc/letsencrypt/nginx用户能读取/etc/letsencrypt/live/下的内容。 - 配置自动同步:因为Certbot的证书90天会过期,所以要设置定时任务(比如crontab),定期同步证书,并且同步后重新加载Nginx配置。比如在ServerA上设置任务,证书更新后自动推送到ServerB,或者在ServerB上定时拉取。
另外也可以用OCI的文件存储服务(File Storage),把/etc/letsencrypt/目录挂载到两台服务器上,这样证书更新后两台机器都能自动获取到最新的文件。 - 配置负载均衡器:让负载均衡器监听443端口,直接转发流量到两台服务器的443端口(同样要开放安全组权限),然后把域名A记录指向LB的公网IP。
方案三:用DNS-01验证方式申请证书
Certbot默认的HTTP-01验证需要域名指向当前服务器才能通过,而DNS-01验证是通过在域名的DNS记录里添加一条TXT记录来完成验证,和服务器IP无关,所以可以在两台服务器上都申请同一个域名的证书。
步骤如下:
- 获取NameCheap的API密钥:登录NameCheap控制台,找到API设置,开启API访问权限,记录下API密钥和用户名。
- 在两台服务器上安装Certbot的DNS插件:安装
certbot-dns-namecheap插件,这样Certbot可以自动添加DNS验证记录。 - 申请证书:在两台服务器上分别执行类似下面的命令申请证书:
其中certbot certonly --dns-namecheap --dns-namecheap-credentials ~/.secrets/certbot/namecheap.ini -d test1.example.comnamecheap.ini文件里要配置你的NameCheap API信息:dns_namecheap_api_key = YOUR_API_KEY dns_namecheap_username = YOUR_USERNAME dns_namecheap_propagation_seconds = 30 - 配置负载均衡器:和方案二一样,让LB转发443流量到两台服务器的443端口,域名指向LB的IP。
各方案优缺点对比
- 方案一:最推荐,后端配置简单,不需要维护证书,性能也更好,LB专门做SSL终止更高效。
- 方案二:适合不想改动现有Nginx配置的场景,但需要维护证书同步机制,有点麻烦。
- 方案三:适合需要后端保持HTTPS的场景,但需要配置DNS API,操作相对复杂一点。
备注:内容来源于stack exchange,提问作者Mervin Hemaraju
相关产品推荐
相关产品推荐

