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
相关产品推荐
相关产品推荐

