Я пытаюсь настроить свой первый сервер nginx, и у меня возникают проблемы с настройкой ipv4 и ipv6.
У меня есть это в верхней части моего файла конфигурации (это единственный блок сервера в файле конфигурации):
server {
# Listen for requests on these ports
listen 80 default;
listen [::]:80 default_server;
}
И это ошибка, которую я получаю, когда пытаюсь запустить ngnix:
* Restarting nginx nginx
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
Любая помощь приветствуется.
Вы дважды пытались подключиться к IPv4.
listen 80 default;
listen [::]:80 default_server;
По умолчанию (в Linux) второй listen
директива связывается как с IPv4, так и с IPv6, если вы явно не запрашиваете привязку только к IPv6 с ipv6only
вариант.
Есть два способа решить эту проблему. Выберите одно (но не оба):
Удалить первый listen
директива как избыточная. Вторая директива будет охватывать как IPv4, так и IPv6-соединения через IPv6-сопоставленный IPv6. Единственным недостатком этого является то, что ваши журналы будут отображать адреса IPv4 в сопоставленной форме, например ::ffff:203.0.113.25
.
Добавить ipv6only=on
ко второму listen
директива.
Обратите внимание, что начиная с nginx 1.3.4, ipv6only=on
теперь значение по умолчанию, что делает вашу исходную конфигурацию необходимой в этих более поздних версиях. До этого значение по умолчанию зависело от операционной системы.
Вы используете Linux?
Тогда, возможно, придется сделать что-то вроде этого:
listen [::]:80 ipv6only=on;
listen 80;