Listen and IPV6 behaviour ?
Igor Sysoev
is at rambler-co.ru
Mon Nov 9 21:34:39 MSK 2009
On Mon, Nov 09, 2009 at 07:17:24PM +0100, Jérôme Loyet wrote:
> Hi all,
>
> How to use the nginx listen diective to listen on all interface (ipv4
> and ipv6) and on port 80 ?
>
> I thought "listen [::]:80;" would be enought but it seems that I have
> to use both "listen 80;" and "listen [::]:80;"
>
> Is it the normal behaviour or a bug ?
>
> ++ Jerome
>
> OS: OpenBSD 4.5 and linux 2.6.28
> Im' using nginx 0.8.22
> I've enable ipv6 support at compile time with --with-ipv6
> I use the default nginx conf file (just the port has been changed to 81)
> My server is fully ipv6 compliant.
>
> If I start nginx, it listens on ipv4 only :
> listen 81;
>
> root at wild:~/nginx-0.8.22# lsof -i :81
> COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
> nginx 18224 root 6u IPv6 26577575 TCP *:81 (LISTEN)
> nginx 18225 nobody 6u IPv6 26577575 TCP *:81 (LISTEN)
>
> If I changed the listen directive to:
> listen [::]:81;
>
> root at wild:~/nginx-0.8.22# lsof -i :81
> COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
> nginx 18224 root 6u IPv6 26577575 TCP *:81 (LISTEN)
> nginx 18361 nobody 6u IPv6 26577575 TCP *:81 (LISTEN)
>
> If I use both:
> listen [::]:81;
> listen 81;
>
> root at raptor> lsof -i :80
> COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
> nginx 23184 nobody 10u IPv6 0xd639be40 TCP *:81 (LISTEN)
> nginx 23184 nobody 11u IPv4 0xd639b990 TCP *:81 (LISTEN)
> nginx 23235 root 10u IPv6 0xd639be40 TCP *:81 (LISTEN)
> nginx 23235 root 11u IPv4 0xd639b990 TCP *:81 (LISTEN)
This depends on kernel default ipv6only setting.
For example, in FreeBSD its default value is "net.inet6.ip6.v6only: 1"
In Linux it's off.
You may try to use
listen [::]:81 ipv6only=on;
listen 81;
to get consistent behaviour.
However, note that ipv6only value can be set only on nginx's start
before bind().
--
Igor Sysoev
http://sysoev.ru/en/
More information about the nginx
mailing list