Pregunta

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.La segunda es una consola de administración en admin.domain.com.Estos funcionan muy bien.Ahora me gustaría que todas las demás solicitudes de dominio vayan a un solo index.php - Tengo muchos dominios y subdominios y no es práctico enumerarlos todos en una configuración de nginx.

Hasta ahora he intentado configurar server_name a * pero eso falló como comodín no válido. *.* funciona hasta que agrego los otros bloques del servidor, entonces supongo que entra en conflicto con ellos.

¿Hay alguna manera de ejecutar un bloque de servidor general en nginx después de que se hayan definido otros sitios?

NÓTESE BIEN.No soy un spammer, estos son sitios genuinos con contenido útil, ¡simplemente funcionan con el mismo CMS desde una base de datos!

¿Fue útil?

Solución

Cambie la opción de escucha a esto en su bloque de servidor general.(Agregar default_server) esto tomará todas sus conexiones no definidas (en el puerto especificado).

listen       80  default_server;

si desea enviar todo a index.php si el archivo o carpeta no existe;

try_files                       $uri /$uri /index.php;

Otros consejos

Un guión bajo simple también funciona:

server_name  _;

Fuente : http://nginx.org/en/docs/http/server_names.html

Esto funcionará:

server_name ~^(.+)$

Para mí, definir de alguna manera default_server no estaba funcionando.lo resolví por

server_name ~^.*$

usando la expresión regular de todos.

Ahora puedes usar máscara:

server {
    listen       80;
    server_name  *.example.org;
    ...
}

server {
    listen       80;
    server_name  mail.*;
    ...
}

Mira más aquí: http://nginx.org/en/docs/http/server_names.html

Solo 1 server directiva

De nginx listen Documentos

El parámetro predeterminado_server, si está presente, hará que el servidor se convierta en el servidor predeterminado para la dirección especificada: par de puertos.Si ninguna de las directivas tiene el parámetro predeterminado_server, el primer servidor con la dirección: el par de puertos será el servidor predeterminado para este par.

Si solo tienes 1 server directiva, que manejará todas las solicitudes, no es necesario configurar nada.


Múltiple server directiva

Si desea hacer coincidir todas las solicitudes con lo especificado server directiva, solo agrega default_server parámetro a listen, Nginx usará esto server directiva por defecto.

server {
    listen 80 default_server;
}

Acerca de server_name _;

De Documentos Nginx

En ejemplos generales de servidores se puede ver el extraño nombre “_”:

server {
    listen       80  default_server;
    server_name  _;
    return       444;
}

No hay nada especial en este nombre, es solo uno de una gran cantidad de nombres de dominio no válidos que nunca se cruzan con ningún nombre real.También se pueden utilizar otros nombres no válidos como “--” y “!@#”.

No importa que server_name lo configuras, es solo un Nombre de dominio inválido.

Si también desea capturar solicitudes con vacío Host encabezado (que está permitido en HTTP/1.0) puedes usar expresiones regulares y vacías server_name:

server {
    listen      80;
    server_name ~. "";
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top