[PATCH] Proxy: support configuration of socket buffer sizes
Maxim Dounin
mdounin at mdounin.ru
Fri May 19 18:21:11 UTC 2017
Hello!
On Thu, May 18, 2017 at 06:22:41PM +0000, Karstens, Nate wrote:
> I just wanted to follow up on this patch and make sure that the
> fraud detection notice or confidentiality notice added by my
> company wasn't precluding it from consideration.
No, it wasn't. And the fraud detection notice seems to be added on
your incoming mail, the mailing list copy don't contain anything
like this, see
http://nginx.org/pipermail/nginx-devel/2017-April/009876.html.
Avoiding confidentiality noticies on public mailing lists might be
a good idea though.
[...]
> # HG changeset patch
> # User Nate Karstens <nate.karstens at garmin.com> # Date
> 1493467011 18000
> # Sat Apr 29 06:56:51 2017 -0500
> # Node ID 1251a543804b17941b2c96b84bd1f4e58a37bc15
> # Parent 8801ff7d58e1650c9d1abb50e09f5979e4f9ffbf
> Proxy: support configuration of socket buffer sizes
>
> Allows the size of the buffers used by the TCP sockets for HTTP
> proxy connections to be configured. The new configuration
> directives are:
>
> * proxy_socket_rcvbuf
> * proxy_socket_sndbuf
>
> These correspond with the SO_RCVBUF and SO_SNDBUF socket
> options, respectively.
>
> This is be useful in cases where the proxy processes received
> data slowly. Data was being buffered in three separate TCP
> buffers (nginx-from-client receive, nginx- to-proxy send, and
> proxy-from-nginx receive). The cumulative effect is that the
> client thinks it has sent all of the data, but times out waiting
> for a reply from the proxy, which cannot reply because it is
> still processing the data in its buffers.
In practice, we've never seen cases when default socket buffer
sizes on backend connections are not appopriate, and/or tuning
system default is not sufficient. So even, as you can see from
the code, nginx is able to tune SO_RCVBUF in
ngx_event_connect_peer(), this was never exposed to configuration.
This may be related to the fact that HTTP in general doesn't
really depends on particular parts of a request being buffered,
and nginx does not use pipelining in requests.
Could you please elaborate more on the use case where you see the
problem described, and why tuning system defaults is not
sufficient in your case?
--
Maxim Dounin
http://nginx.org/
More information about the nginx-devel
mailing list