nginx nombre_servidor comodín o comodín
-
13-11-2019 - |
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!
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 _;
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
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 _;
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 ~. "";
}