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

Nginx配置Angular(v19)与Laravel(v11)API前缀404问题求助

Nginx配置解决方案(Angular 19 + Laravel 11 Docker环境)

核心问题分析

你的问题根源是Nginx重写/api/v1前缀后,没有正确将请求导向Laravel的PHP处理逻辑,导致请求未匹配到~ \.php$规则就返回404。开发环境的proxy.conf.json是直接移除前缀转发,但Nginx需要明确处理前缀剥离与PHP请求的路由衔接。

验证有效的Nginx配置示例

以下配置适配Docker环境下的前后端分离+API前缀转发需求:

server {
    listen 80;
    server_name localhost;

    # Angular静态文件根目录(根据你的容器映射路径调整)
    root /usr/share/nginx/html;
    index index.html index.htm;

    # 处理前端SPA路由(解决刷新404问题)
    location / {
        try_files $uri $uri/ /index.html;
    }

    # 处理API请求,剥离/api/v1前缀
    location /api/v1/ {
        # 移除/api/v1前缀,终止当前location规则处理
        rewrite ^/api/v1/(.*)$ /$1 break;
        
        # 转发到Laravel后端容器(替换为你的容器名/IP和端口,比如laravel:9000)
        proxy_pass http://laravel:9000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # 若Laravel与Nginx在同一容器(不推荐,但适配这种场景)
    # location ~ \.php$ {
    #     fastcgi_pass 127.0.0.1:9000;
    #     fastcgi_index index.php;
    #     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    #     include fastcgi_params;
    # }
}

关键配置说明

  • rewrite ^/api/v1/(.*)$ /$1 break;:必须用break终止当前location的规则处理,避免后续规则干扰,确保剥离前缀后的请求能正确传递给后端。
  • 分容器部署时用proxy_pass转发到Laravel容器;同容器部署则直接用fastcgi处理PHP请求,需确保$document_root指向Laravel的public目录。
  • 前端SPA的try_files规则要放在最前面,防止API请求被前端路由逻辑捕获。

常见错误排查点

  • 检查Docker网络连通性:确保Nginx容器能ping通Laravel容器(用容器名或内网IP测试)。
  • 验证重写效果:在/api/v1/的location中添加access_log /var/log/nginx/api.log combined;,查看转发后的请求路径是否符合预期。
  • 调整Laravel配置:在.env中设置APP_URL=http://localhost/api/v1,并在config/trustedproxy.php或bootstrap/app.php中配置信任代理,避免CSRF或路由解析错误。
  • 校验Nginx配置:执行nginx -t验证配置语法合法性,重启Nginx生效。

替代方案(若rewrite规则失效)

如果rewrite始终不生效,可改用proxy_pass的路径拼接方式(注意末尾的斜杠):

location /api/v1/ {
    proxy_pass http://laravel:9000/; # 末尾斜杠会自动剥离/api/v1前缀
    proxy_set_header Host $host;
    # 其他header配置同上
}

内容的提问来源于stack exchange,提问作者Ki_Netic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 09:07:25