我有一台 Ubuntu 12.04 服务器,它有多个 IPv4 地址和 /64 个 IPv6 地址。我让它用 ping6 响应其 IPv6 地址。我希望服务器上托管的域名采用双栈,这样启用 IPv6 的访问者将能够通过 IPv6 访问其网站,而其他人将使用 IPv4。
以下是我的 Apache 配置当前的相关部分:
端口.conf:
NameVirtualHost 199.192.201.82:80
Listen 199.192.201.82:80
Listen [2607:ff50:0:21::2]:80
httpd.conf:
<VirtualHost 199.192.201.82:80>
ServerName cdc.nexussl.net
DirectoryIndex index.php
DocumentRoot /var/www
LogLevel warn
ErrorLog /var/www/error.log
CustomLog /var/www/access.log combined
</VirtualHost>
<VirtualHost 199.192.201.82:80>
ServerName ipv6.nexussl.net
DirectoryIndex index.php
DocumentRoot /var/www
LogLevel warn
ErrorLog /var/www/error.log
CustomLog /var/www/access.log combined
</VirtualHost>
<VirtualHost 199.192.201.82:80>
ServerName dual.nexussl.net
DirectoryIndex index.php
DocumentRoot /var/www
LogLevel warn
ErrorLog /var/www/error.log
CustomLog /var/www/access.log combined
</VirtualHost>
cn.nexussl.net有一个指向 199.192.201.82 的 A 记录,ipv6.nexussl.net有一个指向 2607:ff50:0:21::2 的 AAAA 记录,并且dual.nexussl.net拥有 A 和 AAAA 记录。
在该设置下,IPv4 可以正常工作(它们都应该显示“你看起来迷路了”的页面),但从支持 IPv6 的机器访问 ipv6.nexussl.net 或 dual.nexussl.net 会返回
Not Found
The requested URL / was not found on this server.
Apache/2.2.22 (Ubuntu) Server at ipv6.nexussl.net Port 80
dual.nexussl.net 在仅 IPv4 连接上正常工作。最终,我希望所有网站都像 dual.nexussl.net 一样在 DNS 中设置,并同时具有 A 和 AAAA 记录。
在 Apache 的配置中,我不能只使用Listen 80
,因为该服务器上的其他应用程序在其他 IP 上使用端口 80。就 IPv4 而言,Apache 应该只使用 199.192.201.82。
至于 IPv6,我是否应该为每个站点提供自己的 IPv6 地址,而它们只共享一个 IPv4?我觉得ports.conf
为每个站点列出一个 IPv6 地址可能会很麻烦。即使我让它们都共享一个 IPv6 地址,我如何让 Apache 通过 IPv6 正确地为站点提供服务?
答案1
首先,您的 AAAA 记录必须指向您的 IPv6 地址,而不是 199.192.201.82(这在技术上是不可能的,因此我不会对这是一个拼写错误感到惊讶)。
这是一个正确的配置:
端口.conf:
Listen 199.192.201.82:80
NameVirtualHost 199.192.201.82:80
Listen [2607:ff50:0:21::2]:80
NameVirtualHost [2607:ff50:0:21::2]:80
httpd.conf:
<VirtualHost 199.192.201.82:80>
ServerName cdc.nexussl.net
DirectoryIndex index.php
DocumentRoot /var/www
LogLevel warn
ErrorLog /var/www/error.log
CustomLog /var/www/access.log combined
</VirtualHost>
<VirtualHost [2607:ff50:0:21::2]:80>
ServerName ipv6.nexussl.net
DirectoryIndex index.php
DocumentRoot /var/www
LogLevel warn
ErrorLog /var/www/error.log
CustomLog /var/www/access.log combined
</VirtualHost>
<VirtualHost 199.192.201.82:80 [2607:ff50:0:21::2]:80>
ServerName dual.nexussl.net
DirectoryIndex index.php
DocumentRoot /var/www
LogLevel warn
ErrorLog /var/www/error.log
CustomLog /var/www/access.log combined
</VirtualHost>