我有一个基于 nginx 的 HTTP 代理,我想在其中处理所有 HTTP 重定向,以便客户端仅获得重定向链中的最后一个响应。
基本代码如下所示:
location /proxy {
rewrite ^/proxy/([^/]+) $1 break;
proxy_pass http://$uri/;
}
Run Code Online (Sandbox Code Playgroud)
我对以下 1 级重定向的尝试是这样的:
error_page 301 302 307 =200 @redir;
Run Code Online (Sandbox Code Playgroud)
...并拥有这个命名位置:
location @redir {
proxy_pass $proxy_location;
}
Run Code Online (Sandbox Code Playgroud)
只有没有 $proxy_location 变量,我找不到创建它的方法。它应该包含Location:
从上游接收到的标头值。
有什么想法吗?
小智 33
这是对我有用的完整示例:
server {
...
location / {
proxy_pass http://backend;
# You may need to uncomment the following line if your redirects are relative, e.g. /foo/bar
#proxy_redirect / /;
proxy_intercept_errors on;
error_page 301 302 307 = @handle_redirect;
}
location @handle_redirect {
set $saved_redirect_location '$upstream_http_location';
proxy_pass $saved_redirect_location;
}
}
Run Code Online (Sandbox Code Playgroud)
rma*_*ter 10
我相信你想要变量$upstream_http_location。
以 $proxy* 开头的变量控制从 nginx 到上游的内容。$upstream* 系列变量包含有关 nginx 本身收到的响应的信息。您可以使用 $upstream_http_headername 获取从上游服务器收到的任意 HTTP 标头。
请注意,在从上游服务器收到响应之前,这些 $upstream 变量只能为 null,因此它们的使用存在一些限制。
归档时间: |
|
查看次数: |
32730 次 |
最近记录: |