Docker中子目录部署Laravel返回404错误求助
Docker子目录部署Laravel出现404的Nginx配置修复
你的Nginx配置核心问题出在/laravel路径的规则设置上,以下是修正方案和原因说明:
修正后的完整Nginx配置
server { listen 80; client_max_body_size 120M; index index.php index.html; error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; root /var/www; location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass app:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_read_timeout 180; } location / { try_files $uri $uri/ /index.php?$query_string; gzip_static on; } location /laravel { alias /var/www/laravel/public; try_files $uri $uri/ /laravel/index.php?$query_string; # 确保子目录下的PHP文件正常解析 location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass app:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_read_timeout 180; } } }
关键修改点说明
替换
root为alias
原配置用root /var/www/laravel/public时,Nginx会把请求/laravel/xxx拼接成/var/www/laravel/public/laravel/xxx,这和实际文件路径不符。改用alias后,会直接将/laravel/xxx映射到/var/www/laravel/public/xxx,完美匹配Laravel的public目录结构。修正
try_files的 fallback 路径
原配置里的/laravel/public/index.php是错误路径,因为alias已经指向了public目录,正确的fallback应该是/laravel/index.php,确保请求能转发到Laravel的入口文件。嵌套PHP解析规则
主配置的location ~ \.php$不会优先匹配子目录下的PHP请求,嵌套规则后可以保证/laravel下的PHP文件被正确传递给FastCGI处理,同时用$request_filename确保脚本路径准确。
内容的提问来源于stack exchange,提问作者Tapas
相关产品推荐
相关产品推荐

