Ustawienie Nginx na przechwytywanie wszystkich nieobsługiwanych vhostów

41

Jeśli mam już kilka wirtualnych hostów, jak mogę utworzyć wirtualny host do obsługi żądań, które nie pasują do żadnego z wirtualnych hostów? (tzn. dostęp przez IP, inna domena łącząca się z IP, .etc .etc)

SandyD
źródło

Odpowiedzi:

52

Nazwa serwera _; i default_server w konfiguracji nasłuchu są tym, czego szukasz.

Przykład:

server {

   listen 80 default_server;
   server_name _;

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

}
Brian P.
źródło
1
A w przypadku https:listen 443 ssl default_server;
James T. Snell,
Po włączeniu tej opcji moja owncloud 9odpowiedź nie będzie możliwa. Czemu? Owncloud VHOST ma nazwę serwera i nie jest domyślnym serwerem.
Corni,
Nie używam 80tylko 443 jest otwarty.
Corni,
Jeśli to dodam, moje inne fragmenty konfiguracji w / etc / nginx / sites-enabled / są ignorowane. /var/www/defaultw tym przypadku przechodzą wszystkie domeny . Jak mam zamówić fragmenty?
rubo77,
Czy mogę utworzyć vhos do połączeń postgresql?
Erlon Charles,
4

Jeśli używasz protokołu SSL, potrzebujesz dodatkowej instalacji hydraulicznej dla serwera default_server - certyfikatu i klucza (który może być samopodpisany).

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 spróbuje zaakceptować połączenie SSL na serwerze domyślnym dopasowującym adres IP / port. Jeśli na takim serwerze brakuje certyfikatu / klucza, nginx porzuci połączenie. Nie wypróbuje innych serwerów. Więc nie zapomnij cert / key.

andreycpp
źródło
Ważna uwaga na temat certyfikatu SSL! Jeśli brakuje certyfikatu, cały serwer nginx nie uruchomi się (nawet jeśli nginx -tpowie „ok”)
Philipp
3
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;
}

Wpisy dotyczą odpowiednio portu 80 (HTTP), portu 443 (HTTPS), portu 80 IPv6 i portu 443 IPv6.

Możesz rozważyć dodanie, log_not_found off;aby uniknąć dodawania wpisu dziennika dla strony, która nie została znaleziona.

Zaz
źródło