inheritance of proxy_http_version and proxy_set_header

Francis Daly francis at
Wed May 9 20:25:03 UTC 2018

On Wed, May 09, 2018 at 04:32:51AM -0700, Joe Doe wrote:

Hi there,

> I have many multiple mirrors for incoming request. To keep the config
> clean, I set:
>   proxy_http_version 1.1;
>   proxy_set_header "";
> in the http context. This worked for us (verified keep-alive is working),
> and it will inherit to all the mirror proxy_pass.

Those config directives (corrected) will inherit to any "location" which
does not have a "proxy_http_version" directive or a "proxy_set_header"
directive, respectively. (Assuming that neither are set at "server"
level either.)

> However, I recently added a mirror that used https, and I notice these
> settings no longer inherit to this mirror. At least keep-alive was not
> working. To address this, I had to add these 2 settings into the location
> specific to the mirror. (adding to the server context didn't work either)

Can you show the config that does not react the way that you want it to?

If you get the upstream (proxy_pass) server to "echo" the incoming
request, can you see what http version and http headers are sent by nginx?

> According to the documentation, these 2 settings can be in http, server and
> location context. And I assume if it's in http context, it would inherit to
> all the sub-blocks (and it did work for all the other http mirrors). Is
> this assumption incorrect and I should add these 2 settings to all the
> locations where I want to use keep-alive?

Directive inheritance follows the rules, or there is a bug. If these two
settings mean that keep-alive works for you, then you must make sure
that these two settings are in, or inherited into, each location that
you care about.

Francis Daly        francis at

More information about the nginx mailing list