Я новичок в 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;
}
}
С этим я ожидается:
http://localhost
должен показать веб-сайт по умолчаниюhttp://localhost:8080
и http://mytestproject.local
должен показать сайт из mytestproject.Вместо этого произошло вот что:
http://localhost:8080
и http://mytestproject.local
правильно показывает сайт из mytestproject.http://localhost
также доставляет файлы из тестового проекта, а не из веб-сайта по умолчанию, как я ожидалИтак, это мой вопрос:
Где я был не прав? Что мне нужно настроить, чтобы 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