nginx 기반 HTTP 프록시가 있으며 클라이언트가 리디렉션 체인의 마지막 응답 만 얻도록 모든 HTTP 리디렉션을 처리하고 싶습니다.
기본 코드는 다음과 같습니다.
location /proxy {
rewrite ^/proxy/([^/]+) $1 break;
proxy_pass http://$uri/;
}
1 레벨 리디렉션을 따르려는 시도는 다음과 같습니다.
error_page 301 302 307 =200 @redir;
…이 이름의 위치를 가짐 :
location @redir {
proxy_pass $proxy_location;
}
$ proxy_location 변수 만 없으며 변수를 만드는 방법을 찾지 못했습니다. Location:
업스트림으로부터받은 헤더 값을 포함해야합니다 .
이견있는 사람?
답변
변수 $ upstream_http_location 을 원한다고 생각합니다 .
$ proxy *로 시작하는 변수는 nginx에서 업스트림으로가는 것을 제어합니다. $ upstream * 변수 시리즈에는 nginx 자체가받는 응답에 대한 정보가 들어 있습니다. $ upstream_http_headername으로 업스트림 서버에서받은 임의의 HTTP 헤더를 얻을 수 있습니다.
이 $ upstream 변수는 업스트림 서버에서 응답을받을 때까지 null이 될 수 없으므로 사용에 제한이 있습니다.
답변
나를 위해 일한 것의 전체 예는 다음과 같습니다.
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;
}
}