Reverse Proxy with 500k connections
Andrei Belov
defan at nginx.com
Tue Mar 7 23:39:27 UTC 2017
Yes, split_clients solution fits perfectly in the described use case.
Also, nginx >= 1.11.4 has support for IP_BIND_ADDRESS_NO_PORT socket
option ([1], [2]) on supported systems (Linux kernel >= 4.2, glibc >= 2.23) which
may be helpful as well.
Quote from [1]:
[..]
Add IP_BIND_ADDRESS_NO_PORT to overcome bind(0) limitations: When an
application needs to force a source IP on an active TCP socket it has to use
bind(IP, port=x). As most applications do not want to deal with already used
ports, x is often set to 0, meaning the kernel is in charge to find an
available port. But kernel does not know yet if this socket is going to be a
listener or be connected. This patch adds a new SOL_IP socket option, asking
kernel to ignore the 0 port provided by application in bind(IP, port=0) and
only remember the given IP address. The port will be automatically chosen at
connect() time, in a way that allows sharing a source port as long as the
4-tuples are unique.
[..]
[1] https://kernelnewbies.org/Linux_4.2#head-8ccffc90738ffcb0c20caa96bae6799694b8ba3a
[2] https://git.kernel.org/torvalds/c/90c337da1524863838658078ec34241f45d8394d
> On 08 Mar 2017, at 01:10, Tolga Ceylan <tolga.ceylan at gmail.com> wrote:
>
> How about using
>
> split_clients "${remote_addr}AAA" $proxy_ip {
> 10% 192.168.1.10;
> 10% 192.168.1.11;
> ...
> * 192.168.1.19;
> }
>
> proxy_bind $proxy_ip;
>
> where $proxy_ip is populated via split clients module to spread the
> traffic to 10 internal IPs.
>
> or add 10 new listener ports (or ips) to your backend server instead,
> (and perhaps use least connected load balancing) in upstream {} set of
> 10 backends. eg:
>
> upstream backend {
> least_conn;
> server 192.168.1.21:443;
> server 192.168.1.21:444;
> server 192.168.1.21:445;
> server 192.168.1.21:446;
> server 192.168.1.21:447;
> server 192.168.1.21:448;
> server 192.168.1.21:449;
> server 192.168.1.21:450;
> server 192.168.1.21:451;
> server 192.168.1.21:452;
> }
>
>
>
>
> On Tue, Mar 7, 2017 at 1:21 PM, Rainer Duffner <rainer at ultra-secure.de> wrote:
>>
>> Am 07.03.2017 um 22:12 schrieb Nelson Marcos <nelsonmarcos at gmail.com>:
>>
>> Do you really need to use different source ips or it's a solution that you
>> picked?
>>
>> Also, is it a option to set the keepalive option in your upstream configure
>> section?
>> http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive
>>
>>
>>
>>
>> I’m not sure if you can proxy web socket connections like http-connections.
>>
>> After all, they are persistent (hence the large number of connections).
>>
>> Why can’t you (OP) do the upgrade to 1.10? I thought it’s the only
>> „supported" version anyway?
>>
>>
>>
>>
>>
>> _______________________________________________
>> nginx mailing list
>> nginx at nginx.org
>> http://mailman.nginx.org/mailman/listinfo/nginx
> _______________________________________________
> nginx mailing list
> nginx at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx
More information about the nginx
mailing list