Я только что включил IPv6 на своем веб-сервере nginx 1.8.0 на основе Debian Jessie. Для этого я отредактировал свою виртуальную конфигурацию хоста:
server {
listen 80;
listen [2001:1608:10:160:34::2]:80;
server_name dominicpratt.de www.dominicpratt.de;
return 301 https://dominicpratt.de$request_uri;
}
server {
listen 443;
listen [2001:1608:10:160:34::2]:443;
server_name dominicpratt.de www.dominicpratt.de;
root /var/www/dominicpratt.de;
index index.html index.htm index.php;
access_log /var/log/nginx/dominicpratt.de_access.log;
ssl on;
ssl_certificate /etc/nginx/ssl/dominicpratt.de/combined.pem;
ssl_certificate_key /etc/nginx/ssl/dominicpratt.de/wildcard.key;
location / {
try_files $uri $uri/ /index.php?q=$request_uri;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm-www.sock;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
}
}
Теперь мой веб-сайт dominicpratt.de работает нормально, а мои поддомены - нет. Они перенаправляются на dominicpratt.de - пример: rss.dominicpratt.de и следующую конфигурацию:
server {
listen 80;
listen [2001:1608:10:160:34::5]:80;
server_name rss.dominicpratt.de;
return 301 https://rss.dominicpratt.de$request_uri;
}
server {
listen 443;
listen [2001:1608:10:160:34::5]:443;
server_name rss.dominicpratt.de;
root /var/www/rss.dominicpratt.de;
index index.html index.htm index.php;
access_log /var/log/nginx/rss.dominicpratt.de_access.log;
ssl on;
ssl_certificate /etc/nginx/ssl/dominicpratt.de/combined.pem;
ssl_certificate_key /etc/nginx/ssl/dominicpratt.de/wildcard.key;
location / {
try_files $uri $uri/ /index.php?q=$request_uri;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm-www.sock;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
}
}
Я не могу дотянуться https://rss.dominicpratt.de и все остальные поддомены. Если я удалю или закомментирую строки прослушивания IPv6 в серверном блоке, он будет работать так же, как и должен.
В Nginx 1.8.0 была ошибка [1] (исправлена в 1.8.1), из-за которой SPDY / h2 был включен по умолчанию. С http / 2 браузеры стараются открыть только одно соединение на сервер [2]. Firefox делает это очень агрессивно [3]. Он повторно использует IPv6-соединения между именами хостов, даже если IPv6-адреса не совпадают (но IPv4-адреса совпадают и сертификаты совпадают). При использовании групповых сертификатов это может привести к наблюдаемой проблеме [4], когда обслуживается контент неправильного домена.
Браузер в этом случае пытается отключить поддомены для оптимизации скорости, ошибочно полагая, что разные поддомены были созданы только для оптимизации скорости в http / 1 (т. Е. С помощью stattic1.example.com и static2.example.com для увеличения количества серверов. соединения параллельно).
Проблема может быть решена путем А) использования разных сертификатов для доменов, Б) использования одного и того же IPv6-адреса для доменов или В) отправкой кода состояния HTTP 421 [5] для ошибочных запросов.
Попробуйте добавить ipv6only=on
на ваш listen
директива для IPv6-адреса, например:
listen [2001:1608:10:160:34::5]:80 ipv6only=on;
...
listen [2001:1608:10:160:34::5]:443 ipv6only=on;
Тот факт, что вы указали IPv6-адрес в директиве listen, не отключает IPv4 по умолчанию.