You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker环境下Nginx访问API路由出现404 Not Found问题求助

解决方案:Docker环境下Nginx访问API返回404的排查步骤

1. 检查Nginx站点核心配置(default.conf)

你仅提供了全局nginx.conf,但实际处理请求的是conf.d/default.conf,这个文件的配置错误是404的最常见诱因。请确保配置正确指向PHP-FPM容器,且根目录与挂载路径匹配:

示例正确的default.conf配置:

server {
    listen 80;
    server_name localhost;

    # 根目录需匹配nginx容器内的项目路径:你的nginx挂载了 .:/var/www/html/,app容器工作目录为/var/www/html/app
    root /var/www/html/app;
    index index.php index.html;

    # 适配API框架的路由重写(如Laravel/ThinkPHP等)
    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    # 转发PHP请求到PHP-FPM容器
    location ~ \.php$ {
        fastcgi_pass app:9000; # 同网络下直接用容器名访问,无需映射外部端口
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # 静态文件直接返回,减少PHP-FPM负载
    location ~* \.(jpg|jpeg|png|gif|css|js|ico)$ {
        expires max;
        log_not_found off;
    }
}

2. 确认挂载路径一致性

  • app容器挂载规则:.:/var/www/html/app,工作目录也为此路径
  • nginx容器挂载规则:.:/var/www/html/,因此nginx内的项目根目录必须设为/var/www/html/app,否则nginx无法找到你的PHP文件

3. 验证PHP-FPM连通性

在nginx容器内测试与app容器的PHP-FPM连接:

# 进入nginx容器
docker exec -it app-nginx sh
# 测试PHP-FPM响应
curl -X POST http://app:9000 -d "SCRIPT_NAME=/index.php&REQUEST_METHOD=GET"

返回PHP相关内容则连接正常;若超时,检查网络配置(你的app_api桥接网络配置无误,容器应能互相访问)

4. 修复文件权限问题

容器内项目文件权限错误会导致nginx或PHP-FPM无法读取文件:

# 进入app容器
docker exec -it app sh
# 基础权限设置
chown -R www-data:www-data /var/www/html/app
chmod -R 755 /var/www/html/app
# 若为Laravel等框架,需额外设置存储目录权限
chmod -R 775 /var/www/html/app/storage

5. 查看日志定位具体错误

通过日志排查404的根本原因:

# 查看nginx错误日志
docker logs app-nginx
# 查看PHP-FPM运行日志
docker logs app

日志会明确显示是文件不存在、权限不足还是路由配置错误。

额外注意事项

  • app容器的9002:9000端口映射是对外暴露的,nginx无需使用此端口,同网络内直接通过容器名app:9000访问即可
  • 确保你的API框架已开启URL重写,且根目录配置与容器内路径一致

内容的提问来源于stack exchange,提问作者bhabishya chaudhary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 10:35:10