Lando本地站点链接异常:启动后出现502错误及连接拒绝问题
解决Win10下Lando启动项目出现502错误(Nginx无法连接上游PHP-FPM)
核心问题分析
Nginx日志显示connect() failed (111: Connection refused) while connecting to upstream,说明Nginx容器无法连接到上游的PHP-FPM容器(对应地址172.20.0.6:9000),这是导致502错误的直接原因。
排查与解决步骤
1. 确认PHP容器状态
先检查项目中PHP相关容器是否正常运行:
lando ps
查看输出中PHP服务(通常名为appserver或php)的状态是否为running。如果容器未启动或频繁重启,查看容器日志定位启动失败原因:
lando logs -s appserver # 替换为你的PHP服务名
常见原因包括:依赖包安装失败、PHP配置错误、项目文件权限问题。
2. 验证容器间网络连通性
进入Nginx容器,测试与PHP容器的网络连通性:
lando ssh -s webserver # 替换为你的Nginx服务名
在Nginx容器内,尝试ping PHP服务的名称(而非固定IP,因为Docker容器IP可能动态变化):
ping appserver # 替换为你的PHP服务名
如果ping不通,说明Docker网络存在异常:
- 清理Docker无用网络:
docker network prune - 重启Lando:
lando rebuild
3. 检查PHP-FPM监听配置
PHP-FPM可能仅监听容器本地地址(127.0.0.1),导致外部容器无法连接:
进入PHP容器:
lando ssh -s appserver
查看PHP-FPM的监听配置(路径可能因PHP版本略有不同):
cat /usr/local/etc/php-fpm.d/www.conf | grep listen
确保输出为listen = 9000或listen = 0.0.0.0:9000,而非listen = 127.0.0.1:9000。如果是后者,修改配置文件后重启PHP服务:
lando restart -s appserver
4. 检查Lando配置文件(.lando.yml)
确保Nginx服务正确依赖并指向PHP服务:
- 确认Nginx服务的
depends_on字段包含PHP服务,保证启动顺序:
services: appserver: type: php:7.4 # ...其他配置 webserver: type: nginx depends_on: - appserver # ...其他配置
- 检查Nginx自定义配置中的上游地址,使用PHP服务名而非固定IP:
例如Nginx配置中应写fastcgi://appserver:9000,而非fastcgi://172.20.0.6:9000。
5. Win10特定网络排查
- 防火墙干扰:临时关闭Win10系统防火墙或WSL防火墙,测试是否恢复正常。如果是防火墙问题,添加允许Docker容器间通信的规则。
- Docker网络重置:打开Docker Desktop,进入
Settings->Reset,选择Reset to factory defaults,重置后重启Docker和Lando。 - WSL模式切换:如果之前在WSL和非WSL模式间切换过,尝试固定使用一种模式(推荐WSL2),并确保WSL网络配置正常。
6. 验证项目依赖
进入PHP容器,检查项目所需的PHP扩展是否已安装:
lando ssh -s appserver php -m
如果缺少必要扩展,在.lando.yml的PHP服务中添加扩展配置:
services: appserver: type: php:7.4 extensions: - mysql - gd - mbstring
然后执行lando rebuild重新构建容器。
内容的提问来源于stack exchange,提问作者That_LEGO_Guy
相关产品推荐
相关产品推荐

