Как я могу заблокировать запросы с неправильным заголовком Host?

12

Я использую nginx для обслуживания своего сайта. Я хотел бы заблокировать все запросы, которые приходят с заголовком HTTP «Host», который не соответствует домену моего сайта.

Чтобы быть более конкретным, мой nginx.conf содержит эти два серверных блока:

server {
    # Redirect from the old domain to the new domain; also redirect
    # from www.newdomain.com to newdomain.com without the "www"
    server_name www.olddomain.com olddomain.com www.newdomain.com;
    listen 80;
    return 301 $scheme://newdomain.com$request_uri;
}

server {
    server_name newdomain.com localhost;
    listen 80;

    # Actual configuration goes here...
}

Я хотел бы заблокировать (то есть «вернуть» код состояния 444) любой трафик, хост которого не www.olddomain.com, olddomain.com, www.newdomain.com или newdomain.com. Как я могу это сделать?

bdesham
источник

Ответы:

14

Определите сервер по умолчанию

если вы явно не определите сервер по умолчанию, nginx будет неявно использовать первый найденный сервер . Итак, просто создайте блок сервера для блокировки неизвестных хостов :

server {
  listen 80 default_server;
  return 444;
}

(нет необходимости добавлять имя_сервера - так как оно никогда не будет совпадать).

AD7six
источник