Tengo una instancia de nginx en ejecución que sirve a varios sitios web. El primero es un mensaje de estado en la dirección IP del servidor. El segundo es una consola de administración encendida admin.domain.com
. Estos funcionan muy bien. Ahora me gustaría que todas las demás solicitudes de dominio vayan a una sola index.php
: tengo muchos dominios y subdominios y no es práctico enumerarlos todos en una configuración nginx.
Hasta ahora he intentado fijar server_name
a *
, pero que falló como un comodín válido. *.*
funciona hasta que agrego los otros bloques de servidor, entonces supongo que entra en conflicto con ellos.
¿Hay alguna manera de ejecutar un bloque de servidor catch-all en nginx después de que se hayan definido otros sitios?
NB No soy un spammer, estos son sitios genuinos con contenido útil, ¡simplemente funcionan con el mismo CMS de una base de datos!
Respuestas:
Cambie la opción de escuchar a esto en su bloque de servidor catch-all. (Agregar
default_server
) esto tomará todas sus conexiones no definidas (en el puerto especificado).si desea enviar todo a index.php si el archivo o carpeta no existe;
fuente
server_name _;
para la página de estado en la dirección IP, tuve que especificar, ¡server_name x.x.x.x
pero está bien!default_server
no parece funcionar en nginx 1.4.6, que es actualmente la última versión en Ubuntu 14.04 ... Cuando lo agrego, elconfigtest
comando devuelve un error y reiniciar el servidor tampoco funciona. Probé exactamente la misma configuración en mi servidor con Debian jessie, que tiene nginx 1.6.2, y funciona perfectamente. Así que prueba otra versión si estás en 1.4.6 ...default_server
directiva también establece el servidor que manejará el protocolo de enlace SSL para las solicitudes en ese puerto. Por lo tanto, si desea que el bloque de servidor A maneje SSL, pero el servidor B actúe como el receptor de HTTPS, la solución es configurarloserver_name ~^(.+)$
en el servidor B.Un guión bajo simple también funciona:
Fuente: http://nginx.org/en/docs/http/server_names.html
fuente
listen 80 default_server
en su configuración._
es solo un nombre inválido ?Esto funcionará:
fuente
server_name ~.
parece ser más eficientePara mí, de alguna manera, definir default_server no estaba funcionando. Lo resolví por
usando la expresión regular de todos.
fuente
Solo 1
server
directivaDe Nginx
listen
DocsSi solo tiene 1
server
directiva, eso manejará todas las solicitudes, no necesita configurar nada.server
Directiva múltipleSi desea hacer coincidir todas las solicitudes con la
server
directiva especificada , simplemente agregue eldefault_server
parámetro alisten
, Nginx usará estaserver
directiva como predeterminada.Acerca de
server_name _;
De Nginx Docs
No importa lo
server_name
que establezca, es solo un nombre de dominio no válido .fuente
Ahora puedes usar máscara:
Busque más aquí: http://nginx.org/en/docs/http/server_names.html
fuente
Si también desea capturar solicitudes con
Host
encabezado vacío (que está permitido en HTTP / 1.0 ), puede usar expresiones regulares y vacíasserver_name
:fuente