AWS ALB子目录访问出现拒绝连接错误,求助解决方案
解决ALB转发WordPress子目录请求时的「拒绝连接」问题
以下是针对你的环境和问题的具体排查与修复步骤:
1. 验证ALB路径规则配置
- 确保路径条件使用的是前缀匹配(ALB规则中「路径为/wp*」属于前缀匹配),而非精确匹配。检查规则的优先级,确保这条规则是所有规则中优先级最高的,避免被其他规则拦截。
- 确认规则的转发动作指向正确的目标组,且目标组的端口设置为80(与EC2上Web服务监听端口一致)。
2. 检查目标组健康状态
- 查看目标组的健康检查结果:如果EC2实例处于不健康状态,ALB会拒绝将请求转发到该实例,直接返回「拒绝连接」。
- 确认健康检查的路径(默认是/)是否能被EC2上的Web服务正常响应,若WordPress根目录的默认页面不是index.html,需修改健康检查路径为
/index.php。
3. 排查EC2上Web服务的配置
假设你使用的是Apache或Nginx,需确保:
- Apache:
- 虚拟主机配置中,
DocumentRoot指向WordPress的根目录(比如/var/www/html),且Directory块允许所有路径的请求:<Directory /var/www/html> AllowOverride All Require all granted </Directory> - 确保
mod_rewrite模块已启用,WordPress的固定链接功能依赖该模块。
- 虚拟主机配置中,
- Nginx:
- 配置文件中需添加正确的location规则,将所有请求转发到WordPress的index.php:
location / { try_files $uri $uri/ /index.php?$args; }
- 配置文件中需添加正确的location规则,将所有请求转发到WordPress的index.php:
- 确认Web服务监听的是80端口,且在EC2本地可以通过
curl http://localhost/wp-login.php正常访问,排除EC2内部服务故障。
4. 修正WordPress的站点URL配置
- 若能通过EC2内网IP访问后台,将「设置-常规」中的站点URL和主页URL修改为
https://domain.name。 - 若无法登录后台,可通过修改
wp-config.php文件强制设置:define('WP_HOME','https://domain.name'); define('WP_SITEURL','https://domain.name'); - 配置Web服务传递
X-Forwarded-Proto头,让WordPress识别原始请求是HTTPS协议:- Apache添加:
RequestHeader set X-Forwarded-Proto "https" - Nginx添加:
proxy_set_header X-Forwarded-Proto $scheme;
- Apache添加:
5. 检查安全组与NACL规则
- ALB的安全组:允许互联网访问443端口(入站规则),允许访问目标组的80端口(出站规则)。
- EC2的安全组:允许ALB所在安全组访问80端口(入站规则),允许出站到互联网(用于WordPress更新等)。
- 子网的NACL:允许入站的443(来自互联网)和80(来自ALB)流量,允许出站的响应流量。
6. 分析ALB访问日志
- 开启ALB的访问日志功能,查看请求的详细记录:
- 检查
target_status_code字段,如果是502,说明EC2实例拒绝了ALB的连接请求;如果是404,说明Web服务找不到对应的路径。 - 查看
request_uri字段,确认ALB转发的路径是否与原始请求一致。
- 检查
内容的提问来源于stack exchange,提问作者Kevinng
相关产品推荐
相关产品推荐

