如何使用Docker外部安装的Nginx代理容器内的php-fpm服务
外部Nginx代理Docker内php-fpm服务操作指南
1. 配置php-fpm容器启动参数
启动容器时必须完成两项配置:端口映射、项目目录挂载
- 端口映射:将容器内php-fpm默认监听的9000端口绑定到宿主机环回地址,避免公网暴露,示例启动命令:
docker run -d -p 127.0.0.1:9000:9000 -v /data/wwwroot/my-project:/app bitnami/php-fpm:latest - 路径对齐要求:宿主机的项目目录挂载到容器内的路径,要和后续Nginx配置里的root路径完全一致,比如上面的示例里宿主机路径是
/data/wwwroot/my-project,容器内路径也是/app,后续Nginx的root就要填/data/wwwroot/my-project - 可选宿主机网络模式:如果是本地测试场景,也可以使用宿主机网络启动容器,无需手动映射端口,启动命令为:
docker run -d --network host -v /data/wwwroot/my-project:/app bitnami/php-fpm:latest
2. 配置宿主机Nginx代理规则
在宿主机Nginx的站点配置目录下新增配置文件,示例规则如下:
server { listen 80; server_name 你的站点域名或IP; # 此处路径必须和php-fpm容器内的项目挂载路径完全一致 root /data/wwwroot/my-project; index index.php index.html; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { try_files $uri =404; # 此处填写容器端口映射到宿主机的对应地址 fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
3. 验证配置生效
- 执行
nginx -t测试Nginx配置是否语法正确,提示success后再执行下一步 - 执行
systemctl reload nginx重载Nginx配置(不同发行版命令可能存在差异) - 访问绑定的站点域名/IP,测试php文件是否可以正常解析
常见问题排查
- File not found报错:优先检查Nginx配置的root路径与容器内项目挂载路径是否完全一致,其次确认容器内php-fpm运行用户对项目目录有读取权限
- 502 Bad Gateway报错:检查php-fpm容器是否正常运行,9000端口是否在宿主机正常监听,防火墙是否未放行本地环回对9000端口的访问
- 权限不足报错:将宿主机项目目录的uid/gid调整为和容器内php-fpm运行用户的uid/gid一致即可解决
内容的提问来源于stack exchange,提问作者Mashiro
相关产品推荐
相关产品推荐

