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

如何配置NGINX Proxy Pass避免302重定向?

解决Nginx代理DigitalOcean Spaces时的302重定向暴露存储桶URL问题

我之前也碰到过几乎一模一样的坑——S3兼容存储桶总爱把请求重定向到它自己的域名,哪怕开了proxy_redirect off也完全没用。核心问题其实出在路径匹配的变量捕获错误,加上没有正确拦截并改写存储桶返回的重定向响应头。

先看你的现有配置:set $url_full '$1';但你的location /files并没有做任何正则分组捕获,所以$1是空值,这直接导致proxy_pass的路径拼接出错,存储桶收到的请求路径不符合预期,自然返回302重定向到它认为正确的地址。

修正后的完整配置

location ~* ^/files/(.*)$ {
    set $s3_bucket 'example.nyc3.digitaloceanspaces.com';
    # 正确捕获/files/之后的所有路径部分
    set $s3_path '/files/$1';

    proxy_http_version 1.1;
    proxy_set_header Host $s3_bucket;
    proxy_set_header Authorization '';
    # 隐藏存储桶的专属响应头,避免暴露后端信息
    proxy_hide_header x-amz-id-2;
    proxy_hide_header x-amz-request-id;
    proxy_hide_header x-amz-meta-server-side-encryption;
    proxy_hide_header x-amz-server-side-encryption;
    proxy_hide_header Set-Cookie;
    proxy_ignore_headers Set-Cookie;
    proxy_intercept_errors on;
    resolver 8.8.4.4 8.8.8.8 valid=300s;
    resolver_timeout 10s;

    # 关键:精准拼接代理路径,确保存储桶收到的请求路径完全匹配
    proxy_pass http://$s3_bucket$s3_path;

    # 核心解决重定向的配置:把存储桶返回的重定向URL替换成自己的域名路径
    proxy_redirect ~*http://$s3_bucket/files/(.*)$ /files/$1;
}

关键修正点解释

  1. 正则匹配路径:用~* ^/files/(.*)$替代原来的location /files,精准捕获/files/之后的所有内容到$1,保证传给存储桶的路径完整且正确,从根源减少重定向触发的可能。
  2. 正确拼接代理路径:通过$s3_path变量组合成/files/$1,确保存储桶收到的请求路径和它实际存储的文件路径完全一致。
  3. 针对性改写重定向:不再用proxy_redirect off,而是匹配存储桶返回的重定向URL(比如http://example.nyc3.digitaloceanspaces.com/files/somefile.png),把它替换成你的域名路径/files/somefile.png。这样浏览器收到的重定向地址始终是你的域名,完全隐藏了存储桶的URL。

另外,如果你还有根路径/files不带尾部斜杠的请求,可以再加一个location处理,避免路径格式问题触发存储桶重定向:

location = /files {
    return 301 /files/;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:57:59