Opened 4 years ago

Closed 4 years ago

#1121 closed defect (invalid)

Unexpected listen directive behaviour when 'listen PORT' and 'listen IP:PORT' are used in configuration simultaneously.

Reported by: agugnin@… Owned by:
Priority: minor Milestone:
Component: nginx-core Version: 1.6.x
Keywords: listen Cc:
uname -a: Linux HPSH034 3.10.0-327.28.3.el7.x86_64 #1 SMP Thu Aug 18 19:05:49 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
nginx -V: nginx version: nginx/1.6.3
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-file-aio --with-ipv6 --with-http_ssl_module --with-http_spdy_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module --with-http_perl_module --with-mail --with-mail_ssl_module --with-pcre --with-pcre-jit --with-google_perftools_module --with-debug --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E'

Description

Way to reproduce:

server IP: 10.11.12.13

site1.com -> 10.11.12.13

site2.com -> 10.11.12.13

/etc/nginx/conf.d/virtualhosts.conf

server {
listen 10.11.12.13:80;
server_name site1.com;
root /var/www/site1.com/;
...
}

server {
listen 80;
server_name site2.com;
root /var/www/site2.com/;
...
}

Expected behaviour:

site2.com is being listened at all interfaces:

$ curl http://site1.com
Site1.com content
$ curl http://site2.com
Site2.com content

Actual behaviour:

site2.com is ignored on 10.11.12.13

$ curl http://site1.com
Site1.com content
$ curl http://site2.com
Site1.com content

Change History (1)

comment:1 by Maxim Dounin, 4 years ago

Resolution: invalid
Status: newclosed

In the configuration above site2.com is expected to answer requests on all addresses but 10.11.12.13. The beahviour described is correct and it exactly equivalent to what happens when you have two separate listening sockets on 10.11.12.13:80 and on *:80.

If you want site2.com to answer requests on both *:80 and 10.11.12.13:80 listening sockets, you have to specify both sockets in the appropriate server{} block:

server {
    listen 10.11.12.13:80;
    server_name site1.com;
    root /var/www/site1.com/;
    ...
}

server {
    listen 80;
    listen 10.11.12.13:80;
    server_name site2.com;
    root /var/www/site2.com/;
    ...
}

See How nginx processes a request for an introductory description on how nginx handles requests and how appropriate server{} block is selected.

Note: See TracTickets for help on using tickets.