Nginx + IPv6

    Недавно написал топик про поддержку IPv6 в Windows 7/Vista/XP (это тут). Захотелось сделать поддержку IPv6 на своём сервере, где хостируются сайты, в итоге вот что получилось.

    Сервер у меня под FreeBSD, использовал HE.net для получения IPv6 адреса на сервере, вот конфиг настройки этого туннеля в /etc/rc.conf:

    ipv6_gateway_enable="YES"
    ipv6_enable="YES"
    gif_interfaces="gif0"
    gifconfig_gif0="ВАШ_IP_СЕРВЕРА 72.52.104.74"
    ipv6_ifconfig_gif0="2001:470:1f04:***::2"  #Выданный вам IPv6
    ipv6_defaultrouter="2001:470:1f04:***::1" #Это адрес сервера HE.net в IPv6.
    

    Теперь встал вопрос о поддержки веб-сервера, адресации IPv6. У меня используется связка nginx + apache 2.2, вот выдержка server в конфиге nginx:

    server {
        listen 80 default;
        listen [::]:80 default;
        server_name _;
            location /nginx_status {
                    stub_status on;
                    access_log   off;
                    allow all;
            }
        location / {
            proxy_pass http://127.0.0.1:81;
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
            client_max_body_size       10m;
            client_body_buffer_size    128k;
            proxy_connect_timeout      90;
            proxy_send_timeout         90;
            proxy_read_timeout         90;
            proxy_send_lowat           12000;
            proxy_buffer_size          4k;
            proxy_buffers              4 32k;
            proxy_busy_buffers_size    64k;
            proxy_temp_file_write_size 64k;
             }
            location ~* \.(jpeg|jpg|gif|png|css|js|pdf|txt|tar|tar.gz|zip|ico|swf|rss)$ {
                    root /usr/local/www/static/$host;
                    access_log off;
                    expires off;
                    }
    }
    

    Как видите, была добавлена строка listen [::]:80 default;. Это даст возможность вашему nginx слушать все IPv6 адреса.

    По умолчанию такую запись можно добавить в одну секцию server. Подразумевается, наверное, то что в IPv6 каждый сайт будет на своём IPv6 адресе.

    Для того, чтобы на каждом server {} был свой IPv6 адрес, нужно добавить listen [2001:470:1f04:***::3]:80. Естественно, цеплять такие адреса надо alias для вашего основного интерфейса.

    Затем вам необходимо внести запись в ДНС ваших доменов, которые хостируются.

    Запись я внёс такую:

    *                 IN               AAAA             2001:470:1f04:***::2
    

    Т.к. у меня все домены на одном сервере и я особо не заморачивался с выдачей каждому сайту IPv6, сделал просто:

    IPv6 Network -----------> IPv6 ServerIP ---------> проксирование на 127.0.0.1 IPv4 (где крутится Apache с обычными настройками для IPv4).

    Итого, прописав это, я получил доступность всех моих доменов из сети IPv6.

    К каждому домену в ServerAlias апача прописал поддомен ipv6.имя_домера.ru. Ну и создал символьные ссылки для домена в своей конструкции (см root /usr/local/www/static/$host;). В этой папке у меня символьные ссылки для всех доменов и поддоменов на моём сервере.

    P.S. Скорей бы многие хостинг провайдеры и хостинг панели стали поддерживать IPv6 из коробки. Большинство доменов могли бы работать и там и там, тогда и переход на IPv6 будет не столь болезненным.

    P.S. Появился трафик IPv6 на сайтах, наверное, из-за добавление в каталоги сайтов, которые поддерживают IPv6.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 21
    • НЛО прилетело и опубликовало эту надпись здесь
      • +4
        Надо как нить собрать для Сысоева ящик пива и подарить ему от админского коммунити :-)

        p.s. может кто знает, куда можно отправить ящик пива ;-)
        • +2
          Рамблер, с пометкой для Игоря Сысоева, до востребования.
          • +21
            шлите прямо на 80 порт, а nginx сам разберется где бэкэнд
            • 0
              Куда пожертвования посылать?) Пусть с пи
            • 0
              Ну приезжайте в Москву, найти не проблема… при желании..:)…
              • НЛО прилетело и опубликовало эту надпись здесь
              • 0
                Контакт, даже от недавнего времени перешел с Апача на нгинкс, набераем обороты…
              • +2
                > хостируются сайты
                Откуда вы такие вообще беретесь? Срочно в школу!
                Кстати, мануалы по nginx отлично читаются и на оффсайте.
                • 0
                  А можно поподробнее как получить IPv6? Это-ж здесь делается: tunnelbroker.net/register.php?

                  Если не сложно, подскажите кто-нить как под линуксом прикрутить IPv6 через туннель
                • 0
                  Эмм. А зачем gif? Если есть внешний IPv4 можно 6to4 использовать. Через gif0 толку от этого IPv6 нет, только для понта.
                  • НЛО прилетело и опубликовало эту надпись здесь
                    • 0
                      Тем кто будет сталкиваться с подобным в Linux:
                      Starting nginx: [emerg]: bind() to [::]:80 failed (98: Address already in use)

                      Нужно указывать только одну строчку:
                      listen [::]:80;

                      Потому что, цитата из документации nginx:
                      In Linux by default any IPv6 TCP socket also accepts IPv4 traffic using the IPv4 to IPv6 mapped address format, i.e., ::ffff:. E.g., ::ffff:192.168.0.27 maps the IPv4 address 192.168.0.27 to an IPv6 address.
                      • 0
                        фиг знает в чем проблема, для себя решил тупо прибиндив на нужные ипв6 ипы

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.