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

AWS ECS对应docker-compose容器名的nginx fastcgi_pass配置方法

问题原因

你之前的几种配置失效原因分别如下:

  • fastcgi_pass php:9000:ECS默认不提供docker-compose内置的基于容器名的自动DNS解析,无法直接识别php这个主机名
  • fastcgi_pass 127.0.0.1:9000/fastcgi_pass 0.0.0.0:9000:这两个地址仅在Nginx和PHP-FPM共享同一个网络命名空间时生效,你当前要么两个容器不在同一个任务下网络隔离,要么PHP-FPM仅监听了IPv6地址:::9000,没有绑定IPv4栈,导致IPv4回环地址无法访问
  • fastcgi_pass unix:/var/run/php-fpm.sock:Unix套接字跨容器通信需要两个容器共享存储卷挂载套接字文件,你没有做对应卷配置,自然找不到套接字文件
正确配置方案

根据你的部署架构二选一即可:

方案1:同任务部署Nginx和PHP-FPM(推荐,性能最优、配置最简单)

这是ECS上部署Nginx+PHP架构最常用的方式,两个容器放在同一个任务定义中,天然共享网络和存储命名空间:

  1. 调整PHP-FPM配置:编辑PHP-FPM的www.conf配置文件,将监听地址从默认的[::]:9000改为0.0.0.0:9000,注释掉listen.allowed_clients配置避免访问拦截
  2. 任务定义配置:
    • 启动类型选Fargate/EC2都可以,网络模式统一用awsvpc
    • 只需要给Nginx容器配置80/443的端口映射,PHP-FPM不需要配置任何端口映射,9000端口不会对外暴露,安全性更高
  3. 修改Nginx配置中的fastcgi_pass为:
    fastcgi_pass 127.0.0.1:9000;
    
  4. 默认安全组会放通同ENI内的所有本地回环流量,不需要额外配置安全组规则。

方案2:Nginx和PHP-FPM分属独立ECS服务(适合需要独立扩缩容的场景)

如果两个服务需要分开部署、独立调整副本数,用ECS服务发现实现连通:

  1. 给PHP-FPM服务开启服务发现,创建VPC内的私有DNS命名空间(例如ecs.internal),设置PHP-FPM服务的发现名为php,服务启动后会自动生成php.ecs.internal的私有DNS记录,指向PHP-FPM所有健康任务的私有IP
  2. 调整PHP-FPM配置:监听地址改为0.0.0.0:9000,配置PHP-FPM任务的安全组,放通入方向9000端口的访问,来源设置为Nginx服务对应的安全组
  3. 修改Nginx配置中的fastcgi_pass为:
    fastcgi_pass php.ecs.internal:9000;
    

可选:Unix套接字配置方式(性能更高)

如果想走Unix套接字减少TCP开销,在同任务部署的基础上额外做如下配置:

  1. 任务定义中新增一个emptyDir类型的共享卷,分别挂载到Nginx和PHP-FPM容器的/run/php-fpm路径
  2. 修改PHP-FPM的www.conf,监听地址改为unix:/run/php-fpm/php-fpm.sock,同时配置listen.mode = 0660,将套接字文件的所属用户/组设置为两个容器运行用户共同所在的组,避免权限拒绝
  3. 修改Nginx配置中的fastcgi_pass为:
    fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
    

内容的提问来源于stack exchange,提问作者whitebear

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:09:41