В чем разница между NameVirtualHost * и NameVirtualHost 0.0.0.0? Кажется, что оба реализуют виртуальные хосты на основе имен, оба работают. Как "0.0.0.0" становится подстановочным знаком?
Я считаю, что они такие же, если взглянуть на код:
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 vs. APR_UNSPEC имеет значение, но я думаю, что это может быть просто совместимость с IPv, поэтому, возможно, есть разница в этом IPv4, когда 0.0.0.0 и IPv6 возможны, когда *, не уверен). Но я мог бы интерпретировать это совершенно неправильно, вы можете убедиться сами в server/vhost.c
.