Preserving all original request headers through a proxy_pass ?
Maxim Dounin
mdounin at mdounin.ru
Tue Dec 7 04:25:29 MSK 2010
Hello!
On Mon, Dec 06, 2010 at 04:15:45PM -0800, Rasmus Lerdorf wrote:
> On 12/6/10 3:46 PM, Eugaia wrote:
> > Hi,
> >
> > On 07/12/2010 01:25, Rasmus Lerdorf wrote:
> >> I'm probably being a bit lazy here, I have only skimmed the code, but is
> >> there a way to bounce all original request headers through a proxy_pass
> >> prefixed with X-Orig-* or something like that?
> >>
> >> One reason for wanting to do this is for proxy detection. Common
> >> headers that are important to preserve are HTTP_X_FORWARDED, HTTP_VIA
> >> and HTTP_PROXY_CONNECTION.
> > Yes, you can use the proxy_set_header directive
> > (http://wiki.nginx.org/HttpProxyModule#proxy_set_header).
> >
> > e.g.
> >
> > proxy_set_header NAME $value;
> >
> > You can obviously choose anything for NAME, including X-Orig-..., and
> > the values can be static strings or generated using variables.
>
> Well, the key word was "all" in the question. I know I can set
> individual ones. I essentially want:
>
> proxy_set_header X-Orig-* $http_*
>
> Since I don't know what the full set might be.
Short answer:
No.
Long answer:
There is no way to pass all headers prefixed. On the other hand,
nginx passes most of the headers to upstream by default (with
their original names), and the only headers which are mungled by
default are Host, Connection, Keep-Alive, Expect (note that this
list a bit longer when proxy_cache is used, see [1]).
So you actually need to pass only original values of these headers
(plus ones you've mangled yourself via proxy_set_header
directive). Or even don't pass anything special at all as long as
you've not mangled headers critical for your task.
[1] http://mdounin.ru/hg/nginx-vendor-current/file/f6fa6099ee59/src/http/modules/ngx_http_proxy_module.c#l508
Maxim Dounin
More information about the nginx
mailing list