整合PHP-FPM与Nginx的Docker镜像访问报错:连接被重置
问题分析与解决:Symfony Docker镜像部署出现
curl: (56) Recv failure: Connection reset by peer错误 错误原因
- Nginx配置冲突:在
location ~ ^/index\.php(/|$)块中同时配置了proxy_pass http://localhost:9000和fastcgi_pass php-upstream,两个指令互斥。proxy_pass用于HTTP代理,fastcgi_pass是PHP-FPM专用通信指令,同时存在会导致Nginx配置失效,无法正确处理请求。 - 服务启动不完整:当前
entrypoint.sh和CMD配置可能仅启动了PHP-FPM,未启动Nginx。若Nginx未运行,容器80端口无服务监听,外部访问会触发连接重置。 - 冗余配置无效:
location @rewriteapp块中的proxy_pass属于冗余配置,Symfony路由已通过try_files和fastcgi处理,该块不会被触发,反而造成配置混乱。
解决步骤
1. 修复Nginx配置文件
修改docker/nginx/default.conf,移除冲突指令和无效块:
server { listen 80; server_name localhost; root /var/www/online-invitations/public; error_log /var/log/nginx/project_error.log; access_log /var/log/nginx/project_access.log; location / { try_files $uri /index.php$is_args$args; } location ~ ^/index\.php(/|$) { fastcgi_pass php-upstream; fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(/.*)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param HTTPS off; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_read_timeout 600; internal; } }
2. 确保Nginx与PHP-FPM同时启动
修改entrypoint.sh,在启动PHP-FPM前启动Nginx:
#!/bin/bash # 后台启动Nginx service nginx start # 前台运行PHP-FPM(保持容器存活) exec "$@"
若镜像无service命令,可替换为nginx -g 'daemon off;' &后台启动Nginx,再执行exec "$@"。
3. 验证PHP-FPM监听地址
检查PHP-FPM配置文件/usr/local/etc/php-fpm.d/www.conf,确保listen = 127.0.0.1:9000,与Nginx upstream配置一致(默认php:8.2-fpm镜像已配置此地址)。
4. 重新构建并启动容器
docker-compose build fpm docker-compose up -d fpm
5. 验证服务状态
进入容器检查进程:
docker-compose exec fpm ps aux
查看Nginx错误日志排查问题:
docker-compose exec fpm tail -f /var/log/nginx/project_error.log
内容的提问来源于stack exchange,提问作者vukojevicf
相关产品推荐
相关产品推荐

