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

Не могу заставить VirtualHost работать с ipv6

У меня есть веб-сайт, обслуживаемый apache. Он работает с IPv4, но не с IPv6. У меня ошибка 500.

Вот мой файл ports.conf:

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

Listen 80
NameVirtualHost *:80

<IfModule ssl_module>
        Listen 443
</IfModule>

<IfModule mod_gnutls.c>
        Listen 443
</IfModule>

И мой VHost:

<VirtualHost *:80 [::]:80>
DocumentRoot "/var/www/html/mysite.ca/www.mysite.ca"
ServerName mysite.ca
<Directory "/var/www/html/mysite.ca/www.mysite.ca">
allow from all
Options +Indexes
</Directory>
ServerAlias www.mysite.ca
</VirtualHost>

Когда я делаю netstat-tlnpt, У меня есть это :

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      3577/master
tcp        0      0 0.0.0.0:453             0.0.0.0:*               LISTEN      4484/perl
tcp        0      0 0.0.0.0:360             0.0.0.0:*               LISTEN      3254/sshd
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      3307/mysqld
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      2923/vsftpd
tcp6       0      0 ::1:25                  :::*                    LISTEN      3577/master
tcp6       0      0 :::443                  :::*                    LISTEN      7240/apache2
tcp6       0      0 :::360                  :::*                    LISTEN      3254/sshd
tcp6       0      0 :::80                   :::*                    LISTEN      7240/apache2

Кажется, apache уже прослушивает IPv6-адрес.

Я пытался добавить:

Listen [::]:80
Listen [::]:443

В мой файл порта, но при перезапуске apache я получаю такой результат:

(98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
(98)Address already in use: AH00072: make_sock: could not bind to address [::]:443

Я попытался изменить подстановочные знаки по статическому адресу, и у меня такая же проблема.

У меня есть другие веб-сайты, которые работают с IPv6 на том же сервере. Это единственное, что не работает.

Что я могу сделать ?

Убедитесь, что apache2 полностью выключается. Возможно, все, что управляет службами, не знает о копии, запускаемой вручную в фоновом режиме. (запустите netstat, когда его нужно остановить, и убедитесь, что ничего не слушает)

В зависимости от версии Apache вам может не понадобиться NameVirtualHost. Видеть https://httpd.apache.org/docs/current/upgrading.html

Если вы получаете ошибку 500, значит, что-то определенно прослушивает порт и отвечает. Это должно быть зарегистрировано в вашем error.log. Если нет, вам может потребоваться настроить параметры ведения журнала, чтобы включить его. Я не вижу ничего, указывающего на то, используете ли вы apache2.2 или 2.4, и конфигурация ведения журнала у них разная.

РЕДАКТИРОВАТЬ: См. Эту страницу о LogLevel https://httpd.apache.org/docs/2.4/mod/core.html#loglevel

Убедитесь, что у вас есть Listen один раз на порт на IP для каждой полной конфигурации для каждого сервера, возможно, закомментируйте те, о которых вы знаете, пока она не запустится без жалоб, и посмотрите, все ли она запускается на порте 80/443

для ipv6 и ipv4, тебе нужно только

listen 80
listen 443 https

find /etc/httpd/ | xargs grep -sniH "listen"

Я вижу это в вашем выводе netstat:

tcp6 0 0 ::: 443 ::: * СЛУШАТЬ 3254 / sshd

Это означает, что у вас есть процесс ssh, прослушивающий ваш порт 443 в IPv6, и действительно, Apache не может привязаться к этому порту:

(98) Адрес уже используется: AH00072: make_sock: не удалось привязать к адресу [::]: 443