Назад | Перейти на главную страницу

как Apache NameVirtualHost понимает «0.0.0.0»?

В чем разница между 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.