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

Виртуальные хосты nginx не слушают правильное имя хоста

Я новичок в nginx, но столкнулся с основной проблемой, которая для меня совершенно не очевидна.

Я установил nginx с помощью brew на свой Mac. Это сработало нормально, с этой базовой неизменной конфигурацией по умолчанию:

server {
   listen 80;
   server_name localhost;

    location / {
        root   html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

Сейчас я разработчик, работаю над несколькими проектами. Раньше я настраивал виртуальный хост в apache для каждого из них в сочетании с пользовательской записью хостов, например myproject1.local.

Итак, чтобы проверить это с помощью nginx, я отредактировал свой файл / etc / hosts и добавил:

# /etc/hosts
127.0.0.1   mytestproject.local

Затем в конфиг nginx я добавил следующее:

server {
    listen 8080;
    listen mytestproject.local:80;
    server_name mytestproject.local;

    location / {
        root /Users/MyUserName/Projects/mytestproject/Web;
        index index.html;
    }
}

С этим я ожидается:

Вместо этого произошло вот что:

Итак, это мой вопрос:

Где я был не прав? Что мне нужно настроить, чтобы localhost отображал веб-сайт по умолчанию, в то время как все остальное на других портах и ​​с другими пользовательскими доменами (через / etc / hosts) отображало соответствующий контент, а не смешивал его?

Заранее спасибо.

Прочтите, как nginx выбирает серверный блок http://nginx.org/en/docs/http/request_processing.html#mixed_name_ip_based_servers.

В вашем случае первый сервер слушает *:80 и второй после 127.0.0.1:80, и когда вы идете в http://localhost/ ваш браузер подключается к 127.0.0.1:80 и nginx выбирают второй серверный блок, потому что он лучше соответствует запросу, Host После этого тестируется заголовок.

Так простое решение - заменить listen mytestproject.local:80; с простым listen 80;.

У меня странное ощущение, что у службы Bonjour что-то есть с этим. Служба Bonjour выполняет многоадресную передачу DNS для доменов .local https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/NetServices/Articles/domainnames.html#//apple_ref/doc/uid/20001072-202537