Docker环境下nginx连接fastcgi上游phpfpm提示Connection refused如何解决
问题原因
nginx报错是因为无法和phpfpm容器的9000端口建立TCP连接,核心原因有以下几个:
- phpfpm的www.conf配置中监听地址为127.0.0.1:9000,仅允许容器本地访问,nginx容器的跨容器请求会被拒绝
- phpfpm服务启动失败,没有正常监听9000端口
- phpfpm实际监听的端口和nginx配置的9000端口不一致
解决步骤
- 检查phpfpm的监听配置
进入phpfpm容器执行命令:docker exec -it phpfpm bash
找到php-fpm池配置文件(默认路径为/etc/php/7.4/fpm/pool.d/www.conf),修改listen配置项:
; 注释掉原来的本地监听或者套接字监听配置 ; listen = 127.0.0.1:9000 ; listen = /run/php/php7.4-fpm.sock ; 改为监听所有地址的9000端口 listen = 0.0.0.0:9000
- 验证端口监听状态
在phpfpm容器内执行ss -tunlp | grep 9000,如果有对应监听输出说明配置生效,没有输出的话查看phpfpm日志/var/log/php7.4-fpm.log排查启动错误。 - 重启php容器生效
执行docker restart phpfpm,之后再次访问localhost:8080验证即可。
补充检查项
- 可以通过
docker logs phpfpm查看phpfpm启动日志,确认没有配置语法错误、扩展缺失等导致启动失败的问题 - 当前docker-compose配置和nginx配置的服务解析逻辑没有问题,同一个compose网络内phpfpm作为容器名可以被nginx正常解析到对应IP
内容的提问来源于stack exchange,提问作者vaso123
相关产品推荐
相关产品推荐

