Hi all,
Although the documentation (
Module ngx_http_proxy_module) says the context
of
proxy_set_header can be http, server, location,we found that
proxy_set_header directive at http level does not work. When moved to
server
level, everything works fine.
Setting proxy_set_header at http level allows us to centralize some
common
settings thus avoid manually copy those directives to each virtual host
when
it was created. e.g., we use X-Http-Scheme header to let backend server
know
if it’s a https request, otherwise they can’t know.
Hello!
On Wed, Jan 05, 2011 at 10:42:09PM +0800, 杨镭 wrote:
it was created. e.g., we use X-Http-Scheme header to let backend server know
if it’s a https request, otherwise they can’t know.
It works at http level just fine. Most likely you’ve defined
proxy_set_header at server level as well, and this cleared
values set on http level. Note the following in wiki:
% proxy_set_header directives issued at higher levels are only
% inherited when no proxy_set_header directives have been issued at
% a given level
Maxim D.
Hi,
Thanks. I did some tests:
(A) Set X-AAA at http level and do nothing at server level.
OK.
(B) Set X-AAA at http level and set X-BBB at server level.
Only X-BBB is set and sent to backend.
So the inheritance mechanism of proxy_set_header works in a All-None
mode.
If there is any directive set at a smaller block, all the values set by
bigger block are cancelled.
Is it possible to change this behavior to the normal inheritance
mechanism
so setting directive at smaller block only cancel the same directive at
bigger block?
Hello!
On Thu, Jan 06, 2011 at 10:23:45PM +0800, 杨镭 wrote:
So the inheritance mechanism of proxy_set_header works in a All-None mode.
If there is any directive set at a smaller block, all the values set by
bigger block are cancelled.
Yes. This is how it works for all array-type directives.
Is it possible to change this behavior to the normal inheritance mechanism
so setting directive at smaller block only cancel the same directive at
bigger block?
No.
Maxim D.