Laravel后端+React前端Nginx配置问题:/api与/admin路由访问异常求助
Laravel后端+React前端Nginx配置问题:/api与/admin路由访问异常求助
兄弟,我之前也踩过Laravel+React同域名部署的Nginx配置坑,看了你的配置,核心问题出在PHP请求的路径匹配冲突和不同路由块的root目录没有正确关联上,我给你拆解下问题和解决办法:
核心问题分析
你当前的配置里,当访问/api/xxx.php或者/admin/xxx.php这类请求时,Nginx的正则匹配优先级会让请求先进入location ~ ^/(api|admin)块,但这个块里没有处理PHP的逻辑,随后请求会落到全局的location ~ \.php$块。而全局PHP块没有指定root目录,会用Nginx默认的root(不是Laravel的public目录),这就导致PHP文件找不到,出现404或者空白页面。
另外,React的location /块的try_files逻辑是对的,但和Laravel的路由块的协作需要更明确的优先级控制。
修复后的完整Nginx配置
我调整了你的配置,把Laravel相关的PHP处理逻辑直接整合到/api和/admin的路由块里,彻底避免路径冲突:
server { listen 80; server_name mydomain.com; client_max_body_size 100M; # React前端路由:处理所有非/api、非/admin的请求 location / { root /var/www/html/react/dist; try_files $uri $uri/ /index.html; } # Laravel API路由:专属处理/api开头的请求,直接内置PHP处理逻辑 location ^~ /api { root /var/www/html/app/public; try_files $uri $uri/ /index.php?$query_string; include fastcgi_params; fastcgi_pass unix:/var/run/php/php8.3-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors on; fastcgi_read_timeout 300; } # Laravel后台路由:专属处理/admin开头的请求 location ^~ /admin { root /var/www/html/app/public; try_files $uri $uri/ /index.php?$query_string; include fastcgi_params; fastcgi_pass unix:/var/run/php/php8.3-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors on; fastcgi_read_timeout 300; } # 禁止访问隐藏文件和敏感配置 location ~ /\.ht { deny all; } location ~ /\.env { deny all; } }
关键调整点说明
- 用
^~前缀匹配替代正则:^~会让Nginx优先处理这些前缀路由,避免和其他正则路由产生匹配冲突,确保/api和/admin的请求100%落到Laravel的处理逻辑里。 - PHP逻辑内置到Laravel路由块:把PHP-FPM的配置直接放到
/api和/admin块里,确保处理请求时使用的是Laravel的public目录作为root,不会再出现文件路径错误。 - 移除全局PHP块:React的dist目录里本来就没有PHP文件,留着全局PHP块反而容易出问题,直接删掉就好。
测试步骤
- 执行
nginx -t检查修改后的配置是否合法,没有报错再继续 - 执行
systemctl reload nginx让新配置生效 - 分别测试
/api、/admin和前端路由,确认都能正常访问
我之前用这个配置部署过好几个类似的项目,应该能解决你的问题,要是还有问题你可以再反馈细节~
内容来源于stack exchange
相关产品推荐
相关产品推荐

