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

Настройка Nginx для перехвата всех необработанных хостов

Если у меня уже есть несколько виртуальных хостов, как я могу создать виртуальный хост для обработки запросов, которые не соответствуют ни одному из виртуальных хостов? (т.е. доступ по IP, другой домен, связанный с IP, .etc. и т. д.)

название сервера _; и default_server в конфигурации прослушивания - это то, что вы ищете.

Пример:

server {

   listen 80 default_server;
   server_name _;

   root /var/www/default; (or wherever)    

}

Если вы используете SSL, вам понадобится дополнительная сантехника для default_server - сертификат и ключ (который может быть самоподписанным).

server {
    server_name _;
    listen 80 default_server;
    listen 443 ssl default_server;
    ssl_certificate <path to cert>;
    ssl_certificate_key <path to key>;
    return 404; # or whatever
}

Nginx попытается принять SSL-соединение на сервере default_server, соответствующем IP / порту. Если на таком сервере отсутствует сертификат / ключ, nginx разорвет соединение. Он не будет пробовать другие серверы. Так что не забывайте сертификат / ключ.

server {
  listen 80 default_server;
  listen 443 ssl default_server;
  listen [::]:80 default_server;
  listen [::]:443 ssl default_server;

  server_name _;
  root /path/to/default;
}

Записи предназначены для порта 80 (HTTP), порта 443 (HTTPS), порта 80 IPv6 и порта 443 IPv6 соответственно.

Вы можете подумать о добавлении log_not_found off; чтобы избежать добавления в журнал записи о том, что страница не найдена.

Если у вас есть listen директивы с явным перечислением IP-адресов, вам также нужно будет включить эти же IP-адреса в директиву прослушивания вашего блока по умолчанию.

server {
    listen 80 default_server;
    listen 10.0.0.10:80 default_server;
    server_name _;
}

server {
    listen 10.0.0.10:80;
    server_name foo.example.com;
}

Без listen 10.0.0.10:80 default_server директива в блоке по умолчанию, foo.example.com будет служить для http://10.0.0.10 даже если 10.0.0.10 ваш IP-адрес по умолчанию.