我尝试了所有组合,但重启 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 使用该主机名或主机名模式在ServerName
orServerAlias
指令中处理,并且默认虚拟主机(通常是第一个 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 表示法的任何内容: