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

nginx proxy_pass如何处理HTTP 303 See Other内部重定向问题

Nginx内部处理303重定向配置方案

核心思路

通过拦截后端返回的303响应,在Nginx服务内部完成重定向地址的请求,再将最终结果返回给客户端,全程不需要客户端感知内部节点地址。

完整配置示例

events {}
http {
  server {          
      listen 80;
      server_name ceph-dashboard;    
      location / {
        proxy_pass https://node1.foo.com:8443;
        proxy_ssl_verify off;
        # 开启拦截后端响应,不直接将300+状态码返回给客户端
        proxy_intercept_errors on;
        # 捕获303状态码,交给内部location处理
        error_page 303 = @handle_redirect;
      }

      location @handle_redirect {
        # 303规范要求使用GET方法请求重定向地址,丢弃原请求体
        proxy_method GET;
        # 直接使用后端返回的Location头作为代理目标
        proxy_pass $upstream_http_location;
        proxy_ssl_verify off;
        # 如需支持多次303重定向,可开启以下两条配置
        # proxy_intercept_errors on;
        # error_page 303 = @handle_redirect;
        
        # 可根据需要开启重定向次数限制,避免死循环
        # set $redirect_count 0;
        # if ($redirect_count > 2) {
        #   return 502 "Too many redirects";
        # }
        # set $redirect_count $redirect_count+1;
      }
  }
}

配置说明

  • proxy_intercept_errors on:开启后后端返回的状态码大于等于300时,不会直接透传给客户端,会匹配Nginx本地的error_page规则。
  • error_page 303 = @handle_redirect:将303状态码的响应交由名为@handle_redirect的内部location处理,=标识最终返回给客户端的状态码以内部请求的结果为准。
  • $upstream_http_location:Nginx内置变量,保存上一次上游服务返回的Location响应头的值,也就是重定向的目标地址。
  • proxy_method GET:符合HTTP 303响应的规范要求,无论原请求是POST/PUT等哪种方法,重定向请求统一使用GET方法发起。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:54:00