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

Как сделать двойной стек IPv4 / IPv6 с виртуальными хостами на nginx 1.4

Я использую nginx 1.4.1 (сейчас, до 1.2.1) и хотел бы поддерживать двойной стек (IPv4 и IPv6). Я всегда получаю duplicate listen options for xyz ошибки от nginx.

server {
    listen 80 default_server;
    listen [::]:80 ipv6only=on default_server;
    server_name domain1;
}
server {
    listen 443 ssl default_server;
    listen [::]:443 ssl ipv6only=on default_server;
    server_name domain1;
}

server {
    listen 80;
    listen [::]:80 ipv6only=on;
    server_name domain2;
}
server {
    listen 443 ssl;
    listen [::]:443 ssl ipv6only=on;
    server_name domain2;
}

Если я использую только listen 80 Я получаю только IPv4. В противном случае, если я использую listen [::]:80 Получаю только IPv6.

Как настроить nginx 1.4.x для поддержки двойного стека виртуального хоста?

Вы использовали default_server более чем в одном server блок. Это предназначено только для использования для определения виртуального хоста по умолчанию для данной комбинации IP-адреса / порта. Таким образом, он должен появляться только один раз для каждой пары IP / порт во всей вашей конфигурации. Какой хост должен быть виртуальным хостом по умолчанию, решать вам. (Или вы это делали, пока не отредактировали эту часть.)

Также, ipv6only может появляться только один раз во всей конфигурации. Поскольку по умолчанию в 1.4 и выше он on, вы можете полностью опустить его.