Если у меня уже есть несколько виртуальных хостов, как я могу создать виртуальный хост для обработки запросов, которые не соответствуют ни одному из виртуальных хостов? (т.е. доступ по 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-адрес по умолчанию.