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

如何在nginx中启用CORS并解决405 Not Allowed错误?

解决Nginx配置CORS后出现405 Not Allowed的问题

我来帮你排查这个跨域配置的问题——你遇到的405错误主要是因为没处理CORS预请求,加上CORS响应头没有覆盖错误状态导致的,下面是具体的解决步骤:

核心问题分析

  • 未处理OPTIONS预请求:浏览器(包括Postman模拟的跨域请求)会先发送OPTIONS预请求验证服务器权限,Nginx默认拒绝这个方法,直接返回405。
  • CORS头未在错误响应中返回:默认情况下add_header只在2xx/3xx的成功响应中生效,错误状态(比如405)不会带上跨域头,即使解决了OPTIONS问题,后续也可能触发前端报错。

修改后的完整配置

server {
 listen 80 default_server;
 listen [::]:80 default_server;
 server_name localhost;
 root /var/www/test/app/;
 # Load configuration files for the default server block.
 include /etc/nginx/default/*.conf;

 # 给add_header加上always参数,确保所有响应(包括错误)都返回CORS头
 add_header 'Access-Control-Allow-Origin' * always;
 add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
 add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type' always;

 # 显式处理OPTIONS预请求,直接返回204(无内容)结束请求
 if ($request_method = OPTIONS) {
     return 204;
 }

 location / {
     # 可根据需求添加静态文件路由逻辑,比如:
     try_files $uri $uri/ =404;
 }
}

额外注意事项

  • 安全优化:如果不需要允许所有域名跨域,把*替换成具体的前端域名(比如https://your-frontend.com)。
  • 生效验证:修改配置后执行sudo systemctl restart nginx重启服务,再用Postman测试时确保请求头包含Origin字段。

内容的提问来源于stack exchange,提问作者Pyae Phyoe Shein

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:52:44