Nginx配置API请求遇404问题排查求助(Laravel+Docker环境)
排查 Laravel + Nginx + Docker 下 POST /api/project 404 问题
从几个核心方向逐一排查:
1. 确认 Nginx 配置是否正确转发请求到 Laravel
Laravel 依赖 Nginx 将所有非静态资源请求转发到 index.php,你的配置必须包含正确的 try_files 规则。标准配置片段参考:
server { listen 80; root /var/www/html/public; # 必须指向 Laravel 项目的 public 目录 index index.php index.html; location / { try_files $uri $uri/ /index.php?$query_string; # 关键:所有路由请求交给 Laravel 处理 } location ~ \.php$ { fastcgi_pass php-fpm:9000; # 注意:这里是 Docker 中 PHP-FPM 服务的名称,不是 127.0.0.1 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
重点核对项:
root路径是否准确指向 Laravel 的public目录,这是高频出错点try_files末尾是否包含/index.php?$query_string,缺失的话 Nginx 会直接返回404,不会交给 Laravel 处理fastcgi_pass的地址是否与 docker-compose.yml 中 PHP 服务的名称一致(比如 PHP 服务叫php,就写php:9000,容器内无法用 127.0.0.1 访问其他容器)
2. 验证 Laravel 路由是否存在
进入 PHP-FPM 容器,执行命令:
php artisan route:list
仔细查找是否有 POST /api/project 这条路由,注意:
- 路由是否定义在
routes/api.php中?框架默认会给该文件内的路由加上api前缀 - 有没有拼写错误?比如把
project写成projects - 是否被中间件拦截?比如 auth 中间件通常返回401而非404,但可以暂时注释中间件做测试
3. 检查 Docker 网络连通性
- 确认 Nginx 和 PHP-FPM 容器处于同一个 Docker 网络(docker-compose 默认会创建专属网络,手动创建的容器需额外检查)
- 在 Nginx 容器内执行
ping php-fpm(替换为你的 PHP 服务名),如果 ping 不通说明网络异常,请求根本无法到达 PHP 服务
4. 通过日志定位具体错误
- Nginx 错误日志:一般路径为
/var/log/nginx/error.log,查看是否有「File not found」或「connection refused」类错误,前者对应路径配置错误,后者对应 PHP-FPM 连接失败 - Laravel 日志:项目路径下的
storage/logs/laravel.log,如果请求到达 Laravel,日志会记录路由匹配失败信息;如果日志为空,可能是 storage 目录权限不足,执行以下命令修复:
chmod -R 775 storage bootstrap/cache chown -R www-data:www-data storage bootstrap/cache
5. 检查请求本身
- Postman 中确认请求方法为 POST,路径是
/api/project,无多余或缺失字符 - Axios 请求需确认实际请求地址正确,跨域问题通常返回403而非404,但也可同步检查请求头的
Content-Type是否为application/json
内容的提问来源于stack exchange,提问作者Yevhenii Kovalenko
相关产品推荐
相关产品推荐

