Apache NameVirtualHost 如何理解“0.0.0.0”?

Apache NameVirtualHost 如何理解“0.0.0.0”?

“NameVirtualHost *” 和 “NameVirtualHost 0.0.0.0” 之间有什么区别?两者似乎都在实现基于名称的虚拟主机,似乎都可以正常工作。“0.0.0.0” 如何成为通配符?

答案1

从代码简单看,我相信它们是相同的:

AP_DECLARE(void) ap_init_vhost_config(apr_pool_t *p)
{
     ...
}
 /* Parses a host of the form <address>[:port]
...

然后:

if (strcmp(host, "*") == 0) {
        rv = apr_sockaddr_info_get(&my_addr, "0.0.0.0", APR_INET, port, 0, p);
...
else {
        rv = apr_sockaddr_info_get(&my_addr, host, APR_UNSPEC, port, 0, p);

因此看起来 * 在这种情况下被解析为 0.0.0.0,并且如果确实如此,0.0.0.0它将被这样传递(尽管 APR_INET 与 APR_UNSPEC 可能很重要,但我认为这可能只是 IPv 兼容性问题,所以当 0.0.0.0 时 IPv4 和当 * 时 IPv6 可能存在差异,不确定)。 但我的理解可能完全错误,您可以亲自查看server/vhost.c

相关内容