Docker中配置Nginx random负载均衡遇404及实现方案咨询
问题分析与解决方案
当前配置的核心问题是Nginx的PHP处理location块缺少必要的FastCGI参数,导致PHP-FPM无法正确定位并执行脚本,从而返回404错误。另外日志输出配置也存在小问题,以下是具体修正方案:
1. 修正Nginx的default.conf配置
将location ~ \.php$块替换为以下内容,补充PHP-FPM必需的执行参数:
location ~ \.php$ { root /usr/share/nginx/html; fastcgi_pass php; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }
root指定脚本所在根目录,与Nginx全局root保持一致;include fastcgi_params加载Nginx默认的FastCGI基础参数;SCRIPT_FILENAME是PHP-FPM执行脚本的核心参数,用于传递脚本的绝对路径。
同时调整日志配置,避免因main格式未定义导致日志失效:
access_log /dev/stderr combined; error_log /dev/stderr warn;
combined是Nginx内置的标准日志格式,无需额外定义。
2. 确保index.php内容可验证版本
修改你的index.php内容,使其输出PHP版本信息,方便验证负载均衡效果:
<?php echo "当前PHP版本:" . PHP_VERSION; ?>
3. 重启容器生效配置
执行命令重启所有服务:
docker-compose down && docker-compose up -d
4. 验证负载均衡效果
访问http://你的IP:8088/index.php,多次刷新页面,应该能交替看到当前PHP版本:7.4.x和当前PHP版本:8.1.x,说明random two的随机负载均衡规则已生效(该规则表示每次从两个后端节点中随机选择一个)。
额外确认点
- Docker Compose中
php7和php8的服务名与Nginx upstream配置的节点名称一致,无需修改; - 三个容器的
index.php挂载路径完全相同,确保文件同步,当前配置无问题。
内容的提问来源于stack exchange,提问作者Saeed
相关产品推荐
相关产品推荐

