Apache 中使用 IPv6 的 ServerName

Apache 中使用 IPv6 的 ServerName

我基本上是想将 :443 上的每个请求重定向到 :443。我发现这种方法效果很好,一旦访问者放弃 SSL 警报(当然,我的证书对我的 IP 无效),他就会被正确重定向:

<VirtualHost *:443>
    SSLEngine off
    ServerAdmin [email protected]
    ServerName 11.11.11.11
    Redirect Permanent / https://domain.eu/
</VirtualHost>

但是我今天在我的服务器上启用了 IPv6,所以我也想重定向它,但问题就从这里开始。

<VirtualHost *:443>
    SSLEngine off
    ServerAdmin [email protected]
    ServerName [ff:ff:8:ff::1]         //(with or without '[]')
    Redirect Permanent / https://domain.eu/
</VirtualHost>

它根本行不通。我不确定这是否是因为 ServerName 参数中缺少对 IPv6 的支持,但我有点不知所措。

您有什么想法吗?谢谢!

答案1

据我所知,ServerName 指令不允许使用 IPv6 地址。

它不接受 IPv6 地址的括号和冒号。

该格式仅对 Listen、NameVirtualHost 和 VirtualHost 指令有效。

根据您的配置(即:如果您在同一个 Apache 安装上服务多个域),您可以尝试以下操作。

像平常一样创建一个虚拟主机,而不是使用 IPv6 地址定义 ServerName,而是使用正确的 DNS 名称(不必真正存在)来定义它。
现在的诀窍是将此虚拟主机置于该 IP:Port 的每个其他虚拟主机之上。

这样,当用户请求 Apache 未处理的域(或您的情况中的 IP)时,它将尝试使用为该 IP:Port 找到的第一个 VirtualHost 来满足该请求。

答案2

首先,“[”和“]”对于 DNS 命名约定无效,必须在 ServerName 值中满足这些约定。其次,“:”也无效 - 因此请尝试在不使用那些符号的情况下使用它,或者使用主机名 - 第二种方法更好。

答案3

你尝试过这个吗?

Listen [ff:ff:8:ff::1]:80;
<VirtualHost [ff:ff:8:ff::1]:443>
    SSLEngine off
    ServerAdmin [email protected]
    Redirect Permanent / https://domain.eu/
</VirtualHost>

根据监听地址处理请求。

相关内容