如何在 Apache 虚拟主机中定义 IPv6 /64 块

如何在 Apache 虚拟主机中定义 IPv6 /64 块

我尝试了所有组合,但重启 Apache 时总是出错。有人知道如何在 apache 虚拟主机中定义块吗?

<VirtualHost "[2601:9ab4:48af:97::/64]:80" _default_:*>
<VirtualHost [2601:9ab4:48af:97::/64]:80 _default_:*>
<VirtualHost [::/64]:80 _default_:*>
<VirtualHost [::]/64:80 _default_:*>
<VirtualHost [*:/64]:80 _default_:*>

答案1

TLDR;您不能在 VirtualHost 指令中使用 CIDR 表示法或 IP 地址范围。


Apache 配置为响应以下任一请求:

  • 一个特定的 IP 地址和端口号Listen指令
    IPv6 地址

    Listen [2601:9ab4:48af:97::1]:80
    

    或 IPv4 地址

    Listen 127.0.0.1:80
    
  • 通过添加多个特定的 IP 地址和端口号Listen指令,每个唯一的 IP 地址和端口号一个

    Listen [2601:9ab4:48af:97::1]:80
    Listen [2601:9ab4:48af:97::2]:80
    Listen [2601:9ab4:48af:97::3]:80
    Listen 127.0.0.1:80
    Listen 127.0.0.2:81
    
  • 仅通过设置端口号即可在主机上配置每个 IP 地址:

    Listen 80
    Listen 443
    

据我所知,您不能在 Listen 指令中使用网络掩码或定义 IP 地址范围。

配置 apache httpd 后,通过上面的 Listen 指令接受传入连接,您可以可选地创建 VirtualHost 条目。

然后您可以创建基于 IP 的虚拟主机(此时你又被限制在特定的 IP 地址),基于名称的虚拟主机其中,Host:http 请求标头中带有 DNS 域名的标头将由 VirtualHost 处理,VirtualHost 使用该主机名或主机名模式在ServerNameorServerAlias指令中处理,并且默认虚拟主机(通常是第一个 VirtualHost 条目)处理所有与更具体的基于 IP 或基于名称的 VirtualHost 不匹配的请求。请参阅:https://httpd.apache.org/docs/2.4/vhosts/details.html

答案2

首先,我认为你应该听取评论者的意见,将虚拟主机限制为一个 IP 地址。即使你想尝试监听多个 IP 地址,也可以先尝试让一个 IP 地址正常工作。

其次,我认为不需要在 IP 地址周围加引号。

第三,您是否尝试过没有“/64”CIDR 符号的选项?以第二行为例:

<VirtualHost [2601:9ab4:48af:97::]:80>

我在 Apache 文档中没有看到有关 CIDR 表示法的任何内容:

https://httpd.apache.org/docs/2.4/mod/core.html#virtualhost

相关内容