Nginx try_files指令回退URI配置错误导致Laravel服务404 Not Found求助
Nginx try_files指令回退URI配置错误导致Laravel服务404 Not Found求助
我仔细看了你的问题描述、Nginx配置、Docker相关文件,还有错误日志,发现问题出在Nginx的location /subscription块里的try_files回退路径配置,以及FastCGI脚本文件名的参数设置上,导致Nginx无法正确定位到Laravel的入口文件public/index.php。
错误原因分析
从你的Nginx错误日志能明确看到问题点:
2025/06/08 09:24:32 [error] 22#22: *2 open() "/etc/nginx/html/index.php" failed (2: No such file or directory), client: 172.18.0.1, server: localhost, request: "POST /subscription/subscriptions/ HTTP/1.1"
这说明Nginx在尝试回退到入口文件时,错误地去默认根目录/etc/nginx/html找index.php,而不是你映射的Laravel项目/var/www/html/public目录。根源有两个:
- 你用
alias指令把/subscription映射到/var/www/html/public,但try_files的最后一个回退URI写了/subscription/index.php?$query_string,这个路径结合alias会导致Nginx解析路径出错; - FastCGI的
SCRIPT_FILENAME参数用了$request_filename,在alias场景下这个变量会生成错误的文件路径。
修正后的Nginx配置
把你的Nginx server块里的location /subscription部分改成下面这样:
server { listen 80; server_name localhost; location /subscription { alias /var/www/html/public; index index.php index.html index.htm; # 关键修正:回退URI改为/index.php,去掉前面的/subscription前缀 try_files $uri $uri/ /index.php?$query_string; location ~ \.php$ { include fastcgi_params; fastcgi_pass subscription_service:9000; fastcgi_index index.php; # 关键修正:用$document_root$fastcgi_script_name代替$request_filename fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { expires max; log_not_found off; } } }
为什么这样改?
- 当使用
alias时,try_files的回退URI不需要带/subscription前缀,因为alias已经把/subscription路径映射到了/var/www/html/public,直接写/index.php就会指向/var/www/html/public/index.php; $document_root在alias场景下会被自动设置为/var/www/html/public,$fastcgi_script_name是当前请求的PHP脚本路径(比如/index.php),两者拼接后就是正确的脚本文件路径,完美避免了$request_filename在alias下的路径解析错误。
额外检查点
- 确认本地
./backend/subscription_service/public目录存在且包含index.php:从你的docker-compose.yaml配置看,Nginx容器已经映射了这个目录,只要本地文件没问题就OK; - 重启容器让新配置生效:
docker-compose down && docker-compose up -d --build
这样调整后,POST请求/subscription/subscriptions/应该就能正确转发到Laravel的入口文件处理,不会再返回404了。
内容来源于stack exchange
相关产品推荐
相关产品推荐

