Hello! On Mon, Nov 14, 2016 at 02:13:18PM +0300, Руслан Закиров wrote:
> One URL redirects to @streams location: > > HTTP/1.0 200 OK > expires: 0 > cache-control: no-cache, no-store, must-revalidate > x-accel-redirect: @streams > Content-Type: text/html; charset=utf-8 > Status: 200 > x-real-location: /stream/?user_id=153847603&lang=RU > pragma: no-cache > > @streams > > Location looks like this: > > location @streams { > proxy_set_header X-Real-IP $header_ip; > ... more proxy sets... > proxy_set_header X-Y > ttt$upstream_http_x_real_location$upstream_http_status; > proxy_set_header X-Z ttt$http_x_real_location; > proxy_pass http://streams-backend$upstream_http_x_real_location; > } > > However, $upstream_http_x_real_location variable is empty and request > reaches backed with original URL. That's expected. All $upstream_* variables are re-initialized as long as proxy module starts working in a new location, and since there were no response yet when the proxy_pass value is evaluated, it resolves to an empty value. If you want to use $upstream_* variables set by a response with X-Accel-Redirect, you have to store them somewhere else. For example, it can be done using the "set" directive of the rewrite module, which is evaluated before the request is proxied: set $stored_real_location $upstream_http_x_real_location; proxy_pass http://foo$stored_real_location; -- Maxim Dounin http://nginx.org/ _______________________________________________ nginx mailing list nginx@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx