无法使 VirtualHost 使用 ipv6

Dou*_*gui 3 ipv6 apache-2.2

我有一个由 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>
Run Code Online (Sandbox Code Playgroud)

还有我的虚拟主机:

<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>
Run Code Online (Sandbox Code Playgroud)

当我这样做时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
Run Code Online (Sandbox Code Playgroud)

看来 apache 已经在监听 IPv6 地址了。

我尝试添加:

Listen [::]:80
Listen [::]:443
Run Code Online (Sandbox Code Playgroud)

到我的端口文件,但是当我重新启动 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
Run Code Online (Sandbox Code Playgroud)

我试图通过静态地址更改通配符,但我遇到了同样的问题。

我在同一台服务器上还有其他使用 IPv6 的网站。这是唯一不起作用的。

我能做什么 ?

小智 7

确保 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 的此页面