Ipv6 - Cannot assign requested address

12
Likvik
На сайте с 29.07.2010
Online
132
3026

Добрый день.

Прошу помощи, ни по форуму, ни в интернете ответа не нашел, к сожалению.

При рестарте системы не стартует Nginx.

[emerg] 1143#1143: bind() to [...ipv6....]:443 failed (99: Cannot assign requested address)

Запускается вручную и дальше работает нормально.

Решение есть для ipv4. Добавлением строки в sysctl.conf

net.ipv4.ip_nonlocal_bind = 1

Но у меня проблема с ipv6.

На сервере их несколько, ошибка только по одному

Банальное удаление адреса и добавление другого проблему не решает.

nginx/1.12.1

nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

Все сайты на Nginx + PHP-FPM

Все на ssl

Подскажите куда копать...

Незнание порождает уверенность.
M
На сайте с 17.09.2016
Offline
124
#1

Likvik, А ОС какая?

Likvik
На сайте с 29.07.2010
Online
132
#2

Mobiaaa, Debian 8

Оптимизайка
На сайте с 11.03.2012
Offline
396
#3

Наверное на сервере не настроен ipv6. В таком случае уберите из конфигурации nginx строку

listen [::]:80 default;

или похожую где [::]

либо настройте ipv6

P.S. а если он настроен то добавьте её :)

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
Likvik
На сайте с 29.07.2010
Online
132
#4

ipv6 настроен думаю правильно. Когда один ipv6 и ipv4 все работает без проблем.

Как только добавляю доп.ipv6 сразу такая проблема.

Панель ISPmanager 5. Добавляю через нее.

Сайты по ipv6 отвечают и когда тестирую класс ssl, то по ipv6 проблем нет.

Вот /etc/network/interfaces

source /etc/network/interfaces.d/*

auto lo

iface lo inet loopback

iface lo inet6 loopback

auto eth0

auto eth0:0

auto eth0:1

iface eth0 inet static

address *.*.*.*

netmask 255.255.255.192

gateway *.*.*.*

# route *.*.*.*/26 via *.*.*.*

up route add -net *.*.*.* netmask 255.255.255.192 gw *.*.*.* dev eth0

iface eth0 inet6 static

address *.*.*.*::2

netmask 64

gateway *::1

up /sbin/ifconfig eth0 inet6 add *.*.*.*::5/128

up /sbin/ifconfig eth0 inet6 add *.*.*.*::7/128

iface eth0:0 inet static

address *.*.*.*

netmask 255.255.255.255

iface eth0:1 inet static

address *.*.*.*

netmask 255.255.255.255

Тоисть доп. ipv4 и ipv6 по 3 штуки.

И ошибка только по одному ipv6 что на 5 заканчивается, может это и не существенно.

Сайт по нему и по остальным работает нормально.

В nginx.conf есть такое:

listen 80;

listen [::]:80;

И отдельно vhosts для каждого сайта где прописаны эти IP

П.С.

На старом сервере, все точ в точ работало без проблем.

Конфиги и настройки всего идентичны. Просто IP разные.

Что старый что новый настраивал одинаково сам.

Я в тупике...

---------- Добавлено 12.11.2017 в 17:56 ----------

Нашел схожую проблему и решение, помогите интерпретировать.


Автостарт Nginx в CentOS 7
После перезагрузки контейнера с CentOS 7 не поднимается автоматически nginx.
В логах ошибка:
nginx: [emerg] bind() to 0.0.0.0:443 failed (99: Cannot assign requested address)

Если же запустить руками, то все в порядке.
Похоже это из-за того, что nginx пытался запуститься раньше чем поднималась сеть, из-за этого не мог забиндить айпишник.

Сделал так:
# vim /etc/systemd/system/multi-user.target.wants/nginx.service
#After=network.target remote-fs.target nss-lookup.target
After=network.target remote-fs.target nss-lookup.target network-online.target

После перезагрузки nginx стал нормально подниматься.

Тоисть смысл в том чтобы nginx стартовал после поднятия сети.

Что именно мне надо сделать на Debian 8?

Здесь: /etc/systemd/system/multi-user.target.wants/

у меня нет nginx.service

M
На сайте с 01.12.2009
Offline
235
#5

А где у тебя находится скрипт запуска nginx ? /etc/init.d/nginx ?

Администратор Linux,Freebsd. построения крупных проектов.
Likvik
На сайте с 29.07.2010
Online
132
#6
madoff:
А где у тебя находится скрипт запуска nginx ? /etc/init.d/nginx ?

Да, кажется здесь.

Но что с этим делать?


#!/bin/sh
### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $network $remote_fs $local_fs
# Required-Stop: $network $remote_fs $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Stop/start nginx
### END INIT INFO

# Author: Sergey Budnevitch <sb@nginx.com>

PATH=/sbin:/usr/sbin:/bin:/usr/bin

if [ -L $0 ]; then
SCRIPTNAME=`/bin/readlink -f $0`
else
SCRIPTNAME=$0
fi

sysconfig=`/usr/bin/basename $SCRIPTNAME`

[ -r /etc/default/$sysconfig ] && . /etc/default/$sysconfig

DESC=${DESC:-nginx}
NAME=${NAME:-nginx}
CONFFILE=${CONFFILE:-/etc/nginx/nginx.conf}
DAEMON=${DAEMON:-/usr/sbin/nginx}
PIDFILE=${PIDFILE:-/var/run/nginx.pid}
SLEEPSEC=${SLEEPSEC:-1}
UPGRADEWAITLOOPS=${UPGRADEWAITLOOPS:-5}
CHECKSLEEP=${CHECKSLEEP:-3}

[ -x $DAEMON ] || exit 0

DAEMON_ARGS="-c $CONFFILE $DAEMON_ARGS"

. /lib/init/vars.sh

. /lib/lsb/init-functions

do_start()
{
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
$DAEMON_ARGS
RETVAL="$?"
return "$RETVAL"
}

do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --quiet --oknodo --retry=TERM/30/KILL/5 --pidfile $PIDFILE
RETVAL="$?"
rm -f $PIDFILE
return "$RETVAL"
}

do_reload() {
#
start-stop-daemon --stop --signal HUP --quiet --pidfile $PIDFILE
RETVAL="$?"
return "$RETVAL"
}

do_configtest() {
if [ "$#" -ne 0 ]; then
case "$1" in
-q)
FLAG=$1
;;
*)
;;
esac
shift
fi
$DAEMON -t $FLAG -c $CONFFILE
RETVAL="$?"
return $RETVAL
}

do_upgrade() {
OLDBINPIDFILE=$PIDFILE.oldbin

do_configtest -q || return 6
start-stop-daemon --stop --signal USR2 --quiet --pidfile $PIDFILE
RETVAL="$?"

for i in `/usr/bin/seq $UPGRADEWAITLOOPS`; do
sleep $SLEEPSEC
if [ -f $OLDBINPIDFILE -a -f $PIDFILE ]; then
start-stop-daemon --stop --signal QUIT --quiet --pidfile $OLDBINPIDFILE
RETVAL="$?"
return
fi
done

echo $"Upgrade failed!"
RETVAL=1
return $RETVAL
}

do_checkreload() {
templog=`/bin/mktemp --tmpdir nginx-check-reload-XXXXXX.log`
trap '/bin/rm -f $templog' 0
/usr/bin/tail --pid=$$ -n 0 --follow=name /var/log/nginx/error.log > $templog &
/bin/sleep 1
start-stop-daemon --stop --signal HUP --quiet --pidfile $PIDFILE
/bin/sleep $CHECKSLEEP
/bin/grep -E "\[emerg\]|\[alert\]" $templog
}

case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
status)
status_of_proc -p "$PIDFILE" "$DAEMON" "$NAME" && exit 0 || exit $?
;;
configtest)
do_configtest
;;
upgrade)
do_upgrade
;;
reload|force-reload)
log_daemon_msg "Reloading $DESC" "$NAME"
do_reload
log_end_msg $?
;;
restart|force-reload)
log_daemon_msg "Restarting $DESC" "$NAME"
do_configtest -q || exit $RETVAL
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
check-reload)
do_checkreload
RETVAL=0
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|status|restart|reload|force-reload|upgrade|configtest|check-reload}" >&2
exit 3
;;
esac

exit $RETVAL

M
На сайте с 01.12.2009
Offline
235
#7

да вроде все верно.

Попробуйте после start вставить строчку

case "$1" in

start)

sleep 5

.....

Likvik
На сайте с 29.07.2010
Online
132
#8

Это просто отложить должно старт на 5 сек.?

Не стартует вообще, без ошибки, просто не стартует.

Или я не туда поставил.


do_start()
{
case "$1" in start) sleep 5
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
$DAEMON_ARGS
RETVAL="$?"
return "$RETVAL"
}


do_start()
{
case "$1" in start) sleep 5
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
$DAEMON_ARGS
RETVAL="$?"
return "$RETVAL"
}
M
На сайте с 17.09.2016
Offline
124
#9
Likvik:
Здесь: /etc/systemd/system/multi-user.target.wants/
у меня нет nginx.service

Создайте

По умолчанию файлов этих нет

systemd берёт сперва системные установки, а потом уже переопределяет с /etc/systemd

M
На сайте с 01.12.2009
Offline
235
#10

TC - верните все назад пожалуйста, плохая идея была.

Перегрузите машину и покажите вывод.

dmesg

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий