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
额外检查项
- 确认Laravel项目的
routes/api.php中存在POST /login的路由定义 - 检查Laravel的
.env文件,确保APP_URL设置为https://site.com(不需要加/api) - 重启Nginx服务使配置生效:
sudo systemctl restart nginx
内容的提问来源于stack exchange,提问作者Benjamin Button
相关产品推荐
相关产品推荐

