Configurando Nginx para atrapar todos los vhosts no manejados

41

Si ya tengo un montón de hosts virtuales, ¿cómo puedo crear un host virtual para manejar las solicitudes que no coinciden con ninguno de los hosts virtuales? (es decir, acceso por IP, otro dominio que se vincula a IP, .etc .etc)

SandyD
fuente

Respuestas:

52

nombre del servidor _; y default_server en la configuración de escucha es lo que está buscando.

Ejemplo:

server {

   listen 80 default_server;
   server_name _;

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

}
Brian P
fuente
1
Y para el caso https:listen 443 ssl default_server;
James T Snell
Cuando habilito esto, mi owncloud 9no responderá. ¿Por qué? Owncloud VHOST tiene un nombre de servidor y no es un servidor predeterminado.
Corni
No uso 80solo 443 está abierto.
Corni
Si agrego esto, mis otros fragmentos de configuración en / etc / nginx / sites-enabled / son ignorados. todos los dominios van a /var/www/defaulten este caso. ¿Cómo tengo que pedir los fragmentos?
rubo77
¿Puedo crear un vhos para conexiones postgresql?
Erlon Charles
4

Si usa SSL, entonces necesita un poco de plomería adicional para un servidor predeterminado: certificado y clave (que puede ser autofirmado).

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 intentará aceptar la conexión SSL en un servidor predeterminado_puerto que coincida con IP / puerto. Si a dicho servidor le falta cert / key, nginx cortará la conexión. No probará otros servidores. Así que no olvides cert / key.

andreycpp
fuente
Nota importante sobre el certificado SSL! Si falta el certificado, no se ejecutará todo el servidor nginx (aunque nginx -tdiga "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;
}

Las entradas son para el puerto 80 (HTTP), el puerto 443 (HTTPS), el puerto 80 IPv6 y el puerto 443 IPv6, respectivamente.

Podría considerar agregar log_not_found off;para evitar agregar una entrada de registro para la página que no se encuentra.

Zaz
fuente