Spring Boot搭配NGINX部署时POST请求返回404异常问题求助
问题根因
你当前Nginx配置存在两处核心错误,直接导致POST请求异常:
- 全局配置了WebSocket升级头:
proxy_set_header Connection 'upgrade'以及配套的Upgrade头配置是仅用于WebSocket场景的专用配置,你给所有普通HTTP请求都强制加上了该头。当POST请求携带Connection: upgrade头发送到Spring Boot后端时,后端会将其识别为非法的WebSocket升级请求,直接返回404。 - 错误的404重写配置:
error_page 404 =200 $uri本是单页应用的路由 fallback 配置,会把真实的404状态码强制改写为200返回,干扰问题排查。
修复方案
根据你是否使用WebSocket功能选择对应方案即可:
方案1:应用无WebSocket需求
直接删除所有WebSocket相关配置,修改后完整的server块配置如下:
server { listen 80; listen [::]:80; server_name example.com; location / { proxy_pass http://localhost:9077/; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port $server_port; } # 测试阶段先注释该行,确认所有请求正常后,若为单页应用需要路由回退再打开 # error_page 404 =200 $uri; }
方案2:应用需要同时支持普通HTTP请求和WebSocket
新增逻辑判断,仅WebSocket请求才携带升级头,修改后配置如下:
# 该map块需放在http配置层级下,不要放在server块内部 map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 80; listen [::]:80; server_name example.com; location / { proxy_pass http://localhost:9077/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port $server_port; } # 测试阶段先注释该行,确认所有请求正常后,若为单页应用需要路由回退再打开 # error_page 404 =200 $uri; }
修改完成后执行nginx -s reload重载配置,即可恢复所有POST请求正常访问。
内容的提问来源于stack exchange,提问作者Subrahmanyam
相关产品推荐
相关产品推荐

