无法使 VirtualHost 与 ipv6 配合使用

无法使 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 的网站。这是唯一无法使用的网站。

我能做些什么 ?

答案1

确保 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

答案2

确保您已Listen 一次港口知识产权每个服务器的完整配置,也许注释掉你知道的那些,直到它启动时没有抱怨,看看它是否仍然在端口 80/443 上启动

为了IPv6 和 IPv4,你只需要

listen 80
listen 443 https

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

答案3

我在你的 netstat 输出中看到这一点:

tcp6 0 0 :::443 :::* 侦听 3254/sshd

这意味着您有一个 ssh 进程在 IPv6 中监听您的端口 443,而 Apache 确实无法绑定到该端口:

(98)地址已在使用中:AH00072:make_sock:无法绑定到地址 [::]:443

相关内容