Первый блок сервера в конфигурации nginx используется по умолчанию для всех запросов, поступающих на сервер, для которого нет конкретного блока сервера.
Так что в вашей конфигурации предполагается, что ваш реальный домен - REAL.COM,когда пользователь вводит его, он разрешается на ваш сервер, и, поскольку для этой настройки нет серверного блока, серверный блок для FAKE.COM, являющийся первым серверным блоком (только серверный блок в вашем случае), будет обрабатывать этотrequest.
Вот почему в правильных конфигах Nginx есть определенный блок сервера для значений по умолчанию, прежде чем следовать за другими для определенных доменов.
# Default server
server {
return 404;
}
server {
server_name domain_1;
[...]
}
server {
server_name domain_2;
[...]
}
и т. д.
** РЕДАКТИРОВАТЬ **
Кажется, что некоторые пользователи немного смущены этим примером и думают, что он ограничен одним файлом conf и т. Д.
Обратите внимание, что приведенный выше простой пример для разработки OP кактребуется.
Лично я использую отдельные файлы vhost conf с таким образом (CentOS / RHEL):
http {
[...]
# Default server
server {
return 404;
}
# Other servers
include /etc/nginx/conf.d/*.conf;
}
/etc/nginx/conf.d/
будет содержать domain_1.conf, domain_2.conf ...domain_n.conf, который будет включен после блока сервера в основной файл nginx.conf, который всегда будет первым и всегда будет значением по умолчанию, если только он не переопределен с помощью директивы default_server в другом месте.
Алфавитный порядокв этом случае имена файлов conf-файлов для других серверов становятся неактуальными.
Кроме того, это расположение дает большую гибкость в том смысле, что можно определить несколько значений по умолчанию.
В моем конкретном случае у меня Apache прослушивает порт 8080 только на внутреннем интерфейсе, и я передаю скрипты PHP и Perl в Apache.
Однако я запускаю два отдельных приложения, которые оба возвращают ссылки с «: 8080» в прикрепленном html-файле, поскольку они обнаруживают, что Apache не работает на стандартном порту 80, и пытаюсь «помочь» мне.
Это вызывает проблему в том, что ссылки становятся недействительными, так как Apache не может быть достигнут с внешнего интерфейса, и ссылки должны указывать на порт 80.
Я решаю эту проблему, создав сервер по умолчанию для порта8080 для перенаправления таких запросов.
http {
[...]
# Default server block for undefined domains
server {
listen 80;
return 404;
}
# Default server block to redirect Port 8080 for all domains
server {
listen my.external.ip.addr:8080;
return 301 http://$host$request_uri;
}
# Other servers
include /etc/nginx/conf.d/*.conf;
}
Поскольку ничто в обычных блоках сервера не прослушивает порт 8080, серверный блок перенаправления по умолчанию прозрачно обрабатывает такие запросы благодаря своей позиции в nginx.conf.
На самом деле у меня есть четыре таких серверных блока, и это упрощенный вариант использования.