DEamON_M
@DEamON_M

Nginx. Как показывать ошибку при попытке захода на несуществующий поддомен?

Есть 3 поддомена
test1.domain.ru
test2.domain.ru
test3.domain.ru
и основной домен domain.ru
Для каждого написан свой конфиг nginx'а и всё работает. Однако, если зайти на какой-нибудь test234123.domain.ru, то покажется содержимое domain.ru. Как в этом случае писать ошибку?
  • Вопрос задан
  • 569 просмотров
Решения вопроса 2
nginx вначале решает, какой из серверов должен обработать запрос. Рассмотрим простую конфигурацию, где все три виртуальных сервера слушают на порту *:80:
server {
    listen      80;
    server_name example.org www.example.org;
    ...
}

server {
    listen      80;
    server_name example.net www.example.net;
    ...
}

server {
    listen      80;
    server_name example.com www.example.com;
    ...
}

В этой конфигурации, чтобы определить, какому серверу следует направить запрос, nginx проверяет только поле “Host” заголовка запроса. Если его значение не соответствует ни одному из имён серверов или в заголовке запроса нет этого поля вовсе, nginx направит запрос в сервер по умолчанию для этого порта. В вышеприведённой конфигурации сервером по умолчанию будет первый сервер, что соответствует стандартному поведению nginx по умолчанию. Сервер по умолчанию можно задать явно с помощью параметра default_server в директиве listen:
server {
    listen      80 default_server;
    server_name example.net www.example.net;
    ...
}
https://nginx.org/ru/docs/http/request_processing.html

Таким образом, вам нужно создать для неправильных доменов отдельный сервер, сделать его сервером по умолчанию и просто редиректить на файл с сообщением об ошибке.
Ответ написан
Комментировать
@pudovMaxim
web-developer
В примерах конфигурации серверов, обрабатывающих все запросы, встречается странное имя “_”:

server {
    listen       80  default_server;
    server_name  _;
    return       444;
}

Оно не является каким-то особенным, это просто одно из множества некорректных доменных имён, которые никогда не пересекутся ни с одним из реальных имён. С тем же успехом можно использовать имена типа “--” и “!@#”.


Т.е. здесь делаете домен с именем, на который будут попадать запросы, и делаете как основной. А уже внутри него любой ответ
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы