Сервер - это Xen VPS под управлением Ubuntu 12.04, и ни nginx, ни NSD3 не запускаются после перезагрузки. Очевидная причина этого в том, что они не могут привязаться к назначенным им IP-адресам сразу после загрузки.
из /var/log/boot.log
* Starting configure network device [ OK ]
* Stopping save kernel messages [ OK ]
* Starting MTA [ OK ]
nginx: [emerg] bind() to [2a01:1b0:removed:1c9c]:80 failed (99: Cannot assign requested address)
* Starting nsd3... [ OK ]
[...]
* Starting configure virtual network devices [ OK ]
* Stopping configure virtual network devices [ OK ]
из /var/log/nsd.log
[1351715473] nsd[956]: error: can't bind udp socket: Cannot assign requested address
[1351715473] nsd[956]: error: server initialization failed, nsd could not be started
Через пару секунд все работает нормально, и nginx и NSD3 могут быть запущены.
Мне кажется, что проблема в неправильном порядке загрузки, nginx и NSD3 запускаются до полной настройки сети. Я обошел это, поставив
# nginx and nsd boot fix
sleep 4
/etc/init.d/nsd3 start
/etc/init.d/nginx start
в /etc/rc.local, но это неправильное решение. Как правильно решить эту проблему?
Вот моя базовая конфигурация сети, из / etc / network / interfaces auto eth0
iface eth0 inet static
address 89.removed.121
gateway 89.removed.1
netmask 255.255.255.0
iface eth0 inet6 static
up echo 0 > /proc/sys/net/ipv6/conf/all/autoconf
up echo 0 > /proc/sys/net/ipv6/conf/default/autoconf
netmask 64
gateway 2a01:removed:0001
address 2a01:removed:7c3b
up ip addr add 2a01:removed:62bd dev eth0 preferred_lft 0
up ip addr add 2a01:removed:ce6d dev eth0 preferred_lft 0
up ip addr add 2a01:removed:3e13 dev eth0 preferred_lft 0
up ip addr add 2a01:removed:1c9c dev eth0 preferred_lft 0
auto lo
iface lo inet loopback
Эти неудобные id addr существуют потому, что я хотел добавить дополнительные IP-адреса, но все же использовать первый для всего трафика, исходящего с сервера.
Самый простой способ исправить это - запретить привязку nginx или nsd к определенному IP-адресу, а прослушивание любого адреса. Например, в nginx:
listen [::]:80;
Менее простое решение - исправить ваш скрипт сетевых интерфейсов. Как вы настроили сейчас, ваши IP-адреса направляются к вам, но на самом деле они не привязаны к интерфейсу таким образом, чтобы программы могли их явно прослушивать. (Они получают трафик только в том случае, если они привязаны к какому-либо адресу, как указано выше). Для этого вам потребуются дополнительные iface
разделы вместо ip route
команды.
iface eth0 inet6 static
address 2001:db8::1234
netmask 64
iface eth0 inet6 static
address 2001:db8::5678
netmask 64
iface eth0 inet6 static
address 2001:db8::abcd
netmask 64
Похоже, что nsd3 должен запускаться после сети. добавление $ network в часть Required-Start файла /etc/init.d/nsd3 должно решить проблему.