После обновления мой сервер nginx доступен только через IPv6, а не IPv4, в то время как моя конфигурация содержала
listen [::]:80 default_server;
Теперь я изменил это на
listen [::]:80 default_server ipv6only=off;
и сервер снова доступен через IPv4. Эти швы связаны с изменениями в nginx 1.3.4 (раздел «Изменения в nginx 1.3.4»).
Поскольку у меня более одной конфигурации сервера на одной машине, я хотел бы установить ipv6only=off
глобально есть ли возможность это сделать?
Я только что прошел через это при обновлении с 1.0 до 1.4.
Поскольку только один слушатель фактически привязан к любому данному порту, достаточно указать ipv6only=off
в кто угодно вашей listen
директивы.
Итак, по умолчанию server
блоков, у меня есть:
listen [::]:80 ipv6only=off default_server;
и
listen [::]:443 ipv6only=off default_server;
Все остальные server
блоки просто указывают оригинал listen
директивы. И это работает; любой виртуальный хост доступен через IPv4 или IPv6.
Вы также можете добавить его в все из них, но на самом деле это не обязательно. Достаточно добавить его к любому из них.
Однако, поскольку ipv6only=
flag предназначен только для Linux, я больше не использую эту конструкцию. В моих текущих директивах явно указаны как IPv4, так и IPv6, например:
listen [::]:80 default_server;
listen 80 default_server;
Альтернативой ответу @Michael Hampton (но вам нужно коснуться всех файлов) является вставка
listen 80; # listen for IPv4
listen [::]:80; # listen for IPv6
для всех серверов.
Странно то, что вставка listen [::]:80 ipv6only=off
для более чем одного сервера приводит к
nginx: [emerg] duplicate listen options for [::]:80 in /etc/nginx/sites-enabled/default.conf:3
И смесь listen 80;
и ipv6only=off
(на разных серверах) приводит к
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()