AWS ECS部署Symfony应用:Nginx无法连接PHP容器问题排查
排查ECS Fargate中Nginx无法解析PHP容器的问题
核心排查步骤
1. 核对容器名称匹配度
检查ECS任务定义里PHP容器的name字段,必须和Nginx配置中upstream的php完全一致——不能有大小写差异、空格或拼写错误(比如不能写成php-fpm或PHP)。
2. 验证容器间网络连通性
同一Fargate任务内的容器共享网络命名空间,可通过调试工具确认解析是否正常:
- 给Nginx的Dockerfile添加调试工具:
RUN apt-get update && apt-get install -y dnsutils iputils-ping - 部署任务后进入Nginx容器执行:
若解析失败,说明任务定义的网络配置存在异常。nslookup php ping php
3. 调整Nginx的DNS解析逻辑
Nginx启动时会一次性解析upstream地址,若PHP容器未就绪会导致解析失败,可修改配置动态解析:
location ~ \.php$ { set $php_host php; fastcgi_pass $php_host:9000; resolver 127.0.0.11 valid=30s; # 调用Docker内置DNS服务 # 其余fastcgi相关配置... }
4. 检查任务定义的网络与端口配置
- 确认任务定义使用
awsvpc网络模式; - PHP容器无需对外暴露9000端口,只要容器内部监听9000即可,任务定义中不需要添加端口映射(同一任务内容器直接访问内部端口)。
5. 配置容器启动依赖
避免Nginx先于PHP容器启动,在ECS任务定义的Nginx容器配置中添加依赖:
"dependsOn": [ { "containerName": "php", "condition": "START" } ]
6. 确认PHP容器的就绪状态
进入PHP容器检查是否正常监听9000端口:
netstat -tulpn | grep 9000
若未监听,检查PHP-FPM配置(比如www.conf中的listen字段是否为0.0.0.0:9000)。
内容的提问来源于stack exchange,提问作者Ahmed Elkhouly
相关产品推荐
相关产品推荐

