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

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;
    }
}

关键调整点说明

  1. 用^~前缀匹配替代正则:^~会让Nginx优先处理这些前缀路由,避免和其他正则路由产生匹配冲突,确保/api和/admin的请求100%落到Laravel的处理逻辑里。
  2. PHP逻辑内置到Laravel路由块:把PHP-FPM的配置直接放到/api和/admin块里,确保处理请求时使用的是Laravel的public目录作为root,不会再出现文件路径错误。
  3. 移除全局PHP块:React的dist目录里本来就没有PHP文件,留着全局PHP块反而容易出问题,直接删掉就好。

测试步骤

  1. 执行nginx -t检查修改后的配置是否合法,没有报错再继续
  2. 执行systemctl reload nginx让新配置生效
  3. 分别测试/api、/admin和前端路由,确认都能正常访问

我之前用这个配置部署过好几个类似的项目,应该能解决你的问题,要是还有问题你可以再反馈细节~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 14:04:51