Nginx: miles de nombre_servidor

12

¿Cómo puedo configurar Nginx restringir a miles de diferentes server_name sin crear miles de archivos de configuración externos o escribir una línea muy larga de server_name?

De hecho, me gustaría que Nginx sea un proxy inverso solo para server1.com, server2.com, etc.

La mejor solución para mí sería tener un único archivo de configuración externo que contenga mis nombres de servidor restringidos: server1.com, server2.com, etc.

Es posible ?


Ok, gracias por tus respuestas, funciona sin registro. expresiones Solo una gran lista de server_name como lo explica kolbijack. Gracias.

Fred
fuente
debes aceptar la respuesta de kolbijack, si es la que te ayudó.
Oneiroi

Respuestas:

19

Puede colocar la directiva nombre_servidor en un archivo solo y luego incluirla desde el bloque de su servidor:

# example.com.conf
server {
  include /path/to/server_names;
  ...
}

# /path/to/server_names
server_name
  example.com
  domain.com
  foo.com
;

El archivo server_names solo necesita server_name en la parte superior y; en la parte inferior para ser una directiva válida.

kolbyjack
fuente
Tenga cuidado con la latencia / retrasos en la búsqueda / uso de RAM si hace esto. He realizado algunas pruebas con grandes listas (alrededor de 5,000 ServerAliasdirectivas y hasta 16 millones de Deny fromdirectivas) en Apache. 5,000 dominios producen un retraso medible pero pequeño. Al aumentar el número, descubrí que el retraso comenzó a notarse en alrededor de 50,000. Con Apache (y probablemente también con nginx), la lista se mantiene en RAM, lo que significa que con el conjunto más grande que probé, solo podía iniciar un proceso secundario dentro de mi RAM disponible.
Ladadadada
1
@Ladadadada LOL. Acabo de comprobarlo. Nginx usa 30Mb de RAM para 100 000 dominios en la server_namedirectiva y respondeRequest rate: 36900.6 req/s (0.0 ms/req)
VBart
1
60Mb por 1 000 000 yRequest rate: 34716.8 req/s (0.0 ms/req)
VBart
Eso es considerablemente mejor de lo que Apache logró, al menos con el MPF prefork. Práctico para saber.
Ladadadada
7

La server_namedeclaración en su server {}bloque puede ser una expresión regular, esto debería permitirle hacer coincidir server_name s dentro de un patrón establecido.

Se puede ver más información sobre esto aquí: http://nginx.org/en/docs/http/server_names.html#regex_names

Oneiroi
fuente
Gracias, pero no puedo declarar mi lista de dominios personalizados en una sola expresión regular. nombre_servidor [zeus.domain.com | poseidon.domain.com | etc ...]; Sería demasiado largo
Fred
1
@fred ¿Puedes dar un conjunto de datos de ejemplo? a menos que ningún dominio sea como el otro, estaría bastante seguro de que un patrón Regex resolvería su problema.
Oneiroi
@Oneiroi: ejemplo caso de uso = subdominios generados por el usuario. Imagine un producto de software como servicio donde cada usuario obtiene su propio subdominio, y desea utilizar Nginx para enrutarlos a diferentes servidores. En ese caso, ningún dominio es como el otro en absoluto.
m.stenta
@ m.stenta ah, punto justo. A menos que haya algo en común en los subdominios, sí, la expresión regular no funcionará. O tendrá que vincular la creación de expresiones regulares derivadas del dominio en sí mismo que, en mi opinión, frustra el propósito.
Oneiroi