http upstream keepalives
Davide D'Amico
davide.damico at contactlab.com
Tue May 15 04:25:28 UTC 2012
> ------------------------------
>
> Message: 10
> Date: Mon, 14 May 2012 19:57:00 +0100
> From: Francis Daly <francis at daoine.org>
> To: nginx at nginx.org
> Subject: Re: http upstream keepalives
> Message-ID: <20120514185700.GJ457 at craic.sysops.org>
> Content-Type: text/plain; charset=us-ascii
>
> On Mon, May 14, 2012 at 07:32:18PM +0200, Davide D'Amico wrote:
>
> Hi there,
>
>> Hi, I'm reading here:
>>
>> http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive
>>
>> so I've tried:
>>
>> server {
>
>> proxy_set_header Host $host;
>> proxy_set_header X-Real-IP $remote_addr;
>> proxy_set_header X-Forwarded-For
>> $proxy_add_x_forwarded_for;
>
>> location / {
>> proxy_http_version 1.1;
>> proxy_set_header Connection "";
>
> That proxy_set_header directive means that any at an enclosing scope
> are not relevant in this location{}.
>
>> proxy_pass http://172.16.7.9:2323;
>> }
>> }
>>
>> On 172.16.7.9 I launched:
>>
>> > nc -4 -l 172.16.7.9 2323
>>
>> And so I saw:
>> GET / HTTP/1.1
>> Host: 172.16.7.9:2323
>> User-Agent: Wget/1.12 (darwin10.5.0)
>> Accept: */*
>>
>>
>> As you can see the Host header is wrong so I tested this vhost:
>
> No, the Host: header is what you configured it to be.
>
> As your next example also shows.
>
>> So I think that a little modification to documentation could be a
>> good
>> idea :)
>
> The documentation you link to looks correct to me.
>
> (As I read it, it says "Last-Modified: Mon, 23 Apr 2012 13:32:31
> GMT".)
>
> It includes "..." where you include specific directives. It turns out
> that
> the specific directives you include don't do what you expected them
> to.
>
> So: what documentation update could have avoided your confusion, or
> adjusted your expectations to match what nginx actually does?
>
> Note that this is unrelated to the "keepalive" directive; it is
> arguably
> related to the proxy_set_header directive; but it is probably more
> generally related to directive inheritance in nginx.
>
> Some directives don't inherit at all -- so if you want it to apply in
> a location{}, you must set it in that location.
>
> Some directives do inherit from http > server > location -- so to see
> whether it applies in a location{}, you may have to check enclosing
> scopes too.
>
> Some (few) directives are "paired", and will affect the inheritance
> of a
> different directive -- so to see whether it applies in a location{},
> you
> have to check its partner directive too, possibly in enclosing
> scopes.
>
> But for all(?) directives that do inherit, inheritance is by
> replacement,
> not addition.
>
> Where would you have looked to find notes like the above? Perhaps if
> a
> suitable place can be identified, a corrected version could be put
> there.
>
Indeed you are right but I read
(http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive):
For HTTP, the proxy_http_version directive should be set to “1.1” and
the “Connection” header field should be cleared:
upstream http_backend {
server 127.0.0.1:8080;
keepalive 16;
}
server {
...
location /http/ {
proxy_pass http://http_backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
...
}
}
So i was thinking that in this scenario all other proxy_set_header
options were inherited from the server stanza.
Clarify this point could help. That's all.
Thanks for your answers.
More information about the nginx
mailing list