Opened 6 years ago

Closed 6 years ago

#622 closed defect (invalid)

Use upstream headers in proxy_pass and proxy_cache_key

Reported by: Dobes Vandermeer Owned by:
Priority: minor Milestone:
Component: nginx-core Version: 1.6.x
Keywords: Cc:
uname -a: Linux dobes-VirtualBox 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
nginx -V: nginx version: nginx/1.6.0
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_spdy_module --with-http_sub_module --with-http_xslt_module --with-mail --with-mail_ssl_module --add-module=/build/buildd/nginx-1.6.0/debian/modules/nginx-auth-pam --add-module=/build/buildd/nginx-1.6.0/debian/modules/nginx-dav-ext-module --add-module=/build/buildd/nginx-1.6.0/debian/modules/nginx-echo --add-module=/build/buildd/nginx-1.6.0/debian/modules/nginx-upstream-fair --add-module=/build/buildd/nginx-1.6.0/debian/modules/ngx_http_substitutions_filter_module

Description

I wanted to do something like:

proxy_cache_key $upstream_x_accel_cache_key;
proxy_pass $upstream_x_accel_remote_url;

So that my app server could tell nginx a URL to proxy to and a cache key to use for that response.

However, it seems like this doesn't work - the variables always turn up blank even though they can be used in other places.

Variables defined using the map directive also seem to be ignored by proxy_pass and proxy_cache_key.

Change History (2)

comment:1 by Dobes Vandermeer, 6 years ago

As a workaround, I have managed to embed everything I need to use in the proxy_pass and proxy_cache_key directives into the URL instead of using headers, and read them out using a regular expression location.

comment:2 by Maxim Dounin, 6 years ago

Resolution: invalid
Status: newclosed

The $upstream_* variables are cleared once the upstream module starts working again. If you want to use headers returned by an upstream response in another upstream request, you have to save the values using set, e.g.:

set $backend $upstream_x_backend;
proxy_pass http://$backend;
Note: See TracTickets for help on using tickets.