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

Vue+Laravel站点Nginx配置POST请求/api/login报405错误求助

解决Nginx下Laravel API POST请求405错误的配置调整

你的问题出在Nginx对/api路径的转发配置上,导致Laravel无法正确解析POST请求的路由。本地环境正常是因为本地Web服务器(比如Valet或PHP内置服务器)正确处理了路由转发,而当前Nginx配置没有正确剥离/api前缀并将请求传递给Laravel的入口文件。

修正后的Nginx配置

server {
    listen 443 ssl;
    server_name site.com;

    ssl_certificate /etc/ssl/site/site.crt;
    ssl_certificate_key /etc/ssl/site/site.key;

    root /home/user/workspace/site-frontend/dist; # 前端静态文件目录

    index index.html index.htm;

    # 前端路由处理,支持Vue的history模式
    location / {
        try_files $uri $uri/ /index.html;
    }

    # API接口转发配置
    location /api {
        alias /home/user/workspace/site/public; # Laravel的public目录
        # 优先匹配静态文件,不存在则转发到Laravel入口
        try_files $uri $uri/ @api_rewrite;

        # PHP文件处理
        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
            fastcgi_index index.php;
            # 修正脚本路径,适配alias配置
            fastcgi_param SCRIPT_FILENAME $request_filename;
            # 剥离/api前缀,让Laravel解析真实路由
            rewrite ^/api/(.*)$ /$1 break;
            include fastcgi_params;
        }
    }

    # 路由重写规则,将/api/xxx转发到index.php处理
    location @api_rewrite {
        rewrite ^/api/(.*)$ /api/index.php?$1 last;
    }
}

关键调整说明

  • 新增@api_rewrite命名location,专门处理API路由的重写,确保所有非静态文件的请求都转发到Laravel的index.php
  • 在PHP处理块中添加rewrite ^/api/(.*)$ /$1 break;,剥离请求URL中的/api前缀,让Laravel能匹配到定义的/login路由(而不是/api/login)
  • 调整try_files逻辑,避免Nginx因找不到对应静态文件而返回错误,确保请求能正确传递给Laravel

额外检查项

  1. 确认Laravel项目的routes/api.php中存在POST /login的路由定义
  2. 检查Laravel的.env文件,确保APP_URL设置为https://site.com(不需要加/api)
  3. 重启Nginx服务使配置生效:sudo systemctl restart nginx

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 03:58:20