我有一个 Web 应用程序想要在未启用 CORS 的情况下从第三方站点访问文件。请求可以是具有任意参数的任意域。我正在向我的域发送一个请求,其中包含编码为 GET 参数的目标,即
GET https://www.example.com/proxy/?url=http%3A%2F%2Fnginx.org%2Fen%2Fdocs%2Fhttp%2Fngx_http_proxy_module.html
Run Code Online (Sandbox Code Playgroud)
然后在 Nginx 中我做
location /proxy/ {
resolver 8.8.8.8;
set_unescape_uri $dst $arg_url;
proxy_pass $dst;
}
Run Code Online (Sandbox Code Playgroud)
这适用于单个文件,但目标服务器有时会返回一个 Location 标头,我想拦截并修改该标头以便客户端重试。
基本上我想转义 $sent_http_location,将其附加到https://www.example.com/proxy/?url=并将其传递回浏览器以重试。
我试过做
set_escape_uri $tmp $sent_http_location;
proxy_redirect $sent_http_header /pass/?v=$tmp;
Run Code Online (Sandbox Code Playgroud)
但这行不通。我还尝试保存 Location 标头,然后忽略传入的标头
proxy_hide_header
Run Code Online (Sandbox Code Playgroud)
并用我自己的替换它
proxy_set_header
Run Code Online (Sandbox Code Playgroud)
但忽略会导致我丢失保存它的变量。
如何配置 Nginx 来完成重定向处理,以便在代理站点重定向时将编码的 URL 返回给用户?