Re: Множество server { listen } с одним IPv6

Ivan "Spoofing" Alex. G. admin на voglea.net
Чт Мар 15 08:57:28 UTC 2012


On 15/03/12 at 12:43, Maxim Dounin wrote:
> Hello!
> 
> On Thu, Mar 15, 2012 at 04:28:42PM +0800, Ivan "Spoofing" Alex. G. wrote:
> 
> > On 15/03/12 at 12:17, Maxim Dounin wrote:
> > > Hello!
> > > 
> > > On Thu, Mar 15, 2012 at 03:50:20AM -0400, Spoofing wrote:
> > > 
> > > > Теперь, с IPv6 нельзя повешать на один IP
> > > > несколько хостов, как это можно делать
> > > > с IPv4?
> > > 
> > > Можно.
> > > 
> > > > простой пример, как делал обычно:
> > > > server { listen 80; server_name example.com } # для
> > > > редиректа на www.
> > > > server { listen 80; server_name www.example.com } #
> > > > "нормальный" сайт
> > > > server { listen 80 default_server; } # для всего
> > > > остального
> > > > 
> > > > по-умолчанию просто listen 80 не слушает ipv6,
> > > > и обязательно пишем [::], окей:
> > > > server { listen [::]:80; server_name example.com } # для
> > > > редиректа на www.
> > > > server { listen [::]:80; server_name www.example.com } #
> > > > "нормальный" сайт
> > > > server { listen [::]:80 default_server; } # для всего
> > > > остального
> > > > 
> > > > но - не работает.
> > > > 
> > > > Вот элементаро, listen 0.0.0.0:80 разрешает
> > > > слушать сокет сколько угодно раз в
> > > > разных server { }, а listen [::]:80 всего один раз в
> > > > server { }, а потом ошибка:
> > > > 2012/03/14 19:22:12 [emerg] 18692#0: bind() to [::]:80 failed (98:
> > > > Address already in use)
> > > 
> > > Должно работать.
> > > 
> > > Если это linux, то обычно всё ломается уже при одном "listen 
> > > [::]:80", но проблема там не в том что два "[::]:80" нельзя, а в 
> > > том, что "[::]:80" неявно включает в себя ipv4 listen на 80-м 
> > > порту, и он конфликтует с "listen 80" в других частях конфига.  
> > > Решение - написать "ipv6only=yes" явно:
> > > 
> > >     listen [::]:80 ipv6only=yes;
> > > 
> > > Если не работает - приносите nginx -V и полный конфиг с которым 
> > > воспроизводится.
> > > 
> > > Maxim Dounin
> > > 
> > > _______________________________________________
> > > nginx-ru mailing list
> > > nginx-ru at nginx.org
> > > http://mailman.nginx.org/mailman/listinfo/nginx-ru
> > 
> > linux 3.2.9
> > конфиг: http://www.voglea.net/nginx.conf.txt
> > версия: http://www.voglea.net/nginx.version.txt
> 
> С таким конфигом оно даже не проходит nginx -t, параметр 
> "ipv6only=yes" надо указывать только в одной директиве listen для 
> каждого сокета, вместе с default_server. 
> 
> Maxim Dounin
> 
> _______________________________________________
> nginx-ru mailing list
> nginx-ru at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru

Спасибо, надо же... В первом server сделал:

listen [::]:80 default_server ipv6only=on;

в других server { }:

listen [::]:80;

т.е. как вы и сказали, оставил "ipv6only=on" только в одной первой директиве.

Проверил "curl -6 www.voglea.net" и по ipv6 доставляется нужный сайт.

Все работает :)


-- 
Ivan "Spoofing" Alex. G. <admin at voglea.net>
http://www.voglea.net/ | GnuPG: 7896EC55



Подробная информация о списке рассылки nginx-ru