如何让AWS EC2两台实例上的WordPress在负载均衡下协同工作?
让两台EC2 WordPress实例在负载均衡下协同工作的简易方案
嘿,很高兴你把WordPress搭建作为学习项目,这个场景刚好能帮你理解负载均衡的基础逻辑。既然你不需要生产级复杂配置,我就给你一套简单直接的步骤,全程不用自动扩缩容或Elastic Beanstalk:
1. 统一两台实例的WordPress核心配置
你已经让两台实例共用RDS数据库了,接下来要确保它们对外的访问地址统一,避免跳转混乱:
- 登录每台EC2的WordPress后台,进入设置→常规
- 把**WordPress地址(URL)和站点地址(URL)**都改成后续要创建的负载均衡DNS名称(先记下来,等ALB创建完再替换也可以)
- 嫌后台操作麻烦的话,也直接修改
wp-config.php文件,添加以下代码(替换成你的负载均衡地址):define('WP_HOME', 'http://你的负载均衡DNS'); define('WP_SITEURL', 'http://你的负载均衡DNS');
2. 同步静态资源与上传文件
这是最容易踩坑的点:如果两台实例的wp-content/uploads目录不一致,A实例上传的图片在B实例上会显示失效。给你两种简单解决办法:
方法A:用S3存储媒体文件(推荐)
- 在AWS控制台创建一个S3桶,开启静态网站托管(让文件能被公开访问)
- 两台WordPress都安装并配置WP Offload Media Lite这类免费插件,把所有上传的媒体文件自动存到S3,两台实例都会从S3读取文件,完全不用同步本地目录
- 记得给S3桶设置合适的权限,确保WordPress能读写,前端也能访问到文件
方法B:手动同步本地目录(适合临时测试)
如果不想用S3,就用rsync定期同步两台EC2的wp-content目录:
# 在实例A上执行,把uploads目录同步到实例B rsync -avz /var/www/html/wp-content/uploads/ ec2-user@实例B的IP:/var/www/html/wp-content/uploads/
不过这个方法只能临时用,每次上传文件都要手动同步,长期用还是S3更省心。
3. 创建并配置AWS应用负载均衡(ALB)
ALB是AWS最适合Web应用的负载均衡器,配置很简单:
- 进入AWS控制台的EC2→负载均衡器,点击创建负载均衡器,选应用负载均衡器
- 基础配置:给负载均衡器起个名字,选择和EC2实例同一个VPC,监听端口选80(HTTP,HTTPS可以后续再加)
- 安全组:创建新安全组,允许外部80端口访问(0.0.0.0/0)
- 目标组:创建新目标组,目标类型选实例,协议HTTP,端口80,健康检查路径设为
/或者/wp-admin/install.php(确保能检测到WordPress正常运行) - 注册目标:把两台EC2实例添加到目标组,点击注册
- 完成创建后,等待负载均衡器状态变成“活跃”,记下它的DNS名称
4. 开启会话粘性(解决登录/后台跳转问题)
默认情况下,负载均衡器会随机分发请求,这会导致WordPress后台登录后跳转到另一台实例,出现会话失效:
- 进入目标组的属性标签,找到粘性会话,点击编辑
- 开启粘性会话,选择应用Cookie,Cookie名称可以设为
WP_SESSION或者默认的AWSELB,超时时间设1小时左右就行 - 保存后,同一个用户的请求会一直发到同一台实例,避免登录失效的问题
5. 测试验证
- 访问负载均衡的DNS名称,确认WordPress正常加载
- 刷新几次页面,去两台EC2的Apache/Nginx日志(比如
/var/log/httpd/access_log)查看访问记录,确认请求被分发到了不同实例 - 上传一张图片,强制刷新页面,确认图片能正常显示(用S3的话可以直接去桶里查看文件)
- 登录WordPress后台操作几次,确认不会出现登录失效或跳转错误
最后提醒:两台EC2上的WordPress版本、插件、主题必须完全一致,不然可能会出现兼容性问题哦!
内容的提问来源于stack exchange,提问作者Sbal
相关产品推荐
相关产品推荐

