Nginx's "reuseport" for same IP:PORT pair on different virtual hosts -
i'm right understand it's wrong use "reuseport" same ip:port pair on different virtual hosts:
http { server { listen 192.168.0.1:80 reuseport; server_name server1; … } server { listen 192.168.0.1:80 reuseport; server_name server2; … } }
this config gives me:
nginx: [emerg] duplicate listen options 192.168.0.1:80 in /etc/nginx/vhosts/server1.local.conf:66
or
nginx: [emerg] listen() 0.0.0.0:80, backlog 511 failed (98: address in use)
so i've use unique ip:port pairs every virtual host?
in same time server-wide "listen 80 reuseport;" works fine, doing same per unique ip:port ?
answer last question - in nginx, listen
directive allowed in server
context (that means per virtual host).
according manual:
the
listen
directive can have several additional parameters specific socket-related system calls. these parameters can specified inlisten
directive, once given address:port pair.
so if have more 1 virtual host (server
definition in nginx config), can use reuseport
option in 1 of them. non-socket related options (like ssl
or spdy
) can still set more 1 listen
directive.
side note: reuseport
directive does:
nginx version 1.9.1 supports setting so_reuseport
tcp socket parameter. in modern os (linux kernel since 3.9), enables kernel have more socket listeners each socket (ip:port).
without it, when new connection arrives, kernel notified nginx workers , of them try accept
it.
with option enabled, each worker has own listening socket , on each new connection, kernel chooses 1 of them receive - there no contention.
more info benefits, drawbacks , benchmarks of reuseport
option can read on nginx blog post
Comments
Post a Comment