Назад | Перейти на главную страницу

Проблема запуска nginx ipv4 и ipv6

Я пытаюсь настроить свой первый сервер 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 вариант.

Есть два способа решить эту проблему. Выберите одно (но не оба):

  1. Удалить первый listen директива как избыточная. Вторая директива будет охватывать как IPv4, так и IPv6-соединения через IPv6-сопоставленный IPv6. Единственным недостатком этого является то, что ваши журналы будут отображать адреса IPv4 в сопоставленной форме, например ::ffff:203.0.113.25.

  2. Добавить ipv6only=on ко второму listen директива.


Обратите внимание, что начиная с nginx 1.3.4, ipv6only=on теперь значение по умолчанию, что делает вашу исходную конфигурацию необходимой в этих более поздних версиях. До этого значение по умолчанию зависело от операционной системы.

Вы используете Linux?

Тогда, возможно, придется сделать что-то вроде этого:

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