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

Docker中Nginx部署Laravel出现File not found错误求助

解决Docker+Nginx部署Laravel时/api接口返回"File not found"的问题

你的问题出在Nginx对/api路径的配置上:当访问/api/teams时,当前配置会尝试查找/var/www/public/api/teams.php文件,但Laravel的所有路由请求都需要通过public/index.php入口文件解析,所以找不到对应文件导致报错。

修正后的Nginx default.conf 配置如下:

server {
    listen 80;
    server_name my_ip_address;
    error_log /var/log/nginx/error.log debug;

    # 全局设置Laravel的public目录为根路径,避免重复配置
    root /var/www/public;

    location /api/ {
        index index.php;
        fastcgi_pass laravel:9000;
        fastcgi_index index.php;
        # 强制所有/api请求转发到Laravel入口文件处理
        try_files $uri $uri/ /index.php?$query_string;
        fastcgi_param REQUEST_METHOD $request_method;
        # 指定PHP要执行的Laravel入口文件
        fastcgi_param SCRIPT_FILENAME $document_root/index.php;
        # 传递路由路径信息给Laravel框架
        fastcgi_param PATH_INFO $fastcgi_path_info;
        include fastcgi_params;
    }

    location / {
        root /etc/nginx/html;
        index index.html;
        try_files $uri /index.html;
    }

    location = /favicon.ico {
        access_log off;
        log_not_found off;
    }

    location ~* \.(?:css|js|map|png|jpg|jpeg|gif|ico|svg)$ {
        expires max;
        add_header Cache-Control "public, immutable";
    }
}

关键修改说明:

  • 在server块全局设置root /var/www/public,确保/api路径下的文件查找基准正确
  • 在location /api/中添加try_files $uri $uri/ /index.php?$query_string;,让所有/api开头的请求都走Laravel入口文件
  • 将SCRIPT_FILENAME改为$document_root/index.php,明确指定PHP执行的入口文件
  • 添加fastcgi_param PATH_INFO $fastcgi_path_info;,把路由路径传递给Laravel,保证框架能正确解析/api/teams这类路由

修改完成后,重启Nginx容器生效:

docker-compose restart nginx

再访问http://my_ip_address/api/teams即可正常请求Laravel接口。

内容的提问来源于stack exchange,提问作者Tedis Rozenfelds

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 19:12:38