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 in listen 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

Popular posts from this blog

angularjs - ADAL JS Angular- WebAPI add a new role claim to the token -

php - CakePHP HttpSockets send array of paramms -

node.js - Using Node without global install -