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

配置nginx反向代理后Spring Boot的PUT和DELETE请求返回403是什么原因

Spring Boot 部署在 Nginx 反向代理后 PUT/DELETE 请求返回 403 的原因及解决方案

可能原因及对应解决方法

  • 原因1:Spring Security 默认开启的 CSRF 防护拦截
    若项目引入了 Spring Security 依赖,默认会自动开启 CSRF 防护,该机制会直接拦截 GET、HEAD、TRACE、OPTIONS 之外的所有请求,PUT、DELETE 属于拦截范围,会返回 403。
    解决方法:前后端分离的纯 REST 接口场景下,若没有使用 Cookie 做身份鉴权,可以直接关闭 CSRF 防护,配置示例如下:
    @Configuration
    public class SecurityConfig {
        @Bean
        public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
            // 关闭CSRF防护
            http.csrf().disable();
            // 此处保留你原有其他鉴权逻辑配置
            return http.build();
        }
    }
    
  • 原因2:Nginx 配置缺失必要的请求头透传
    你当前的 Nginx 配置仅配置了基础的反向代理规则,没有透传原始请求的方法、域名、协议等信息,部分应用的安全策略会因为无法识别请求的合法性,拦截 PUT、DELETE 这类非普通请求。
    解决方法:修改 Nginx 站点配置的 location 块,补充透传配置:
    location / {
        proxy_pass http://localhost:8082/;
        proxy_buffering off;
        # 透传原始请求方法
        proxy_method $request_method;
        # 透传原始请求头信息
        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;
    }
    
    修改完成后执行 nginx -s reload 重载 Nginx 配置即可生效。
  • 原因3:跨域(CORS)配置限制了请求方法
    若你在 Spring Boot 中配置了跨域规则,只放开了 GET、POST 请求,OPTIONS 预检请求检测到 PUT/DELETE 不在允许范围内时,也会返回 403 错误。
    解决方法:在跨域配置中添加 PUT、DELETE 等需要的请求方法,示例如下:
    // 接口注解方式配置
    @CrossOrigin(origins = "*", methods = {RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT, RequestMethod.DELETE})
    
  • 原因4:Nginx 全局/站点配置存在请求方法限制
    检查 Nginx 的全局配置、当前站点的其他配置片段,是否存在 limit_except 规则,仅允许 GET、POST 请求,限制了其他请求方法的访问。如果存在相关规则,删除对应限制即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:45:05