У меня есть веб-сайт, обслуживаемый 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