Nginx: migliaia di nome_server


12

come posso configurare Nginx limitare a migliaia di diversi nome_server senza creare migliaia di file di configurazione esterni o scrivere una riga server_name molto lunga?

In effetti, vorrei che Nginx fosse un proxy inverso solo per server1.com, server2.com, ecc ...

La soluzione migliore per me sarebbe quella di avere un singolo file di configurazione esterno contenente i miei nomi_server riservati: server1.com, server2.com, ecc ...

È possibile ?


Ok, grazie per le tue risposte, funziona senza reg. espressioni. Solo una grande lista nome_server come spiegato da kolbijack. Grazie.


dovresti accettare la risposta al kolbijack, se è quella che ti ha aiutato.
Oneiroi,

Risposte:


19

Puoi inserire la direttiva server_name in un file da sola e quindi includerla dal tuo blocco server:

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

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

Il file server_names richiede solo nome_server in alto e; in fondo per essere una direttiva valida.


Fai attenzione a latenza / ritardi di ricerca / utilizzo della RAM in questo caso. Ho effettuato alcuni test con elenchi di grandi dimensioni (circa 5.000 ServerAliasdirettive e fino a 16 milioni di Deny fromdirettive) in Apache. 5.000 domini produce un ritardo misurabile ma piccolo. All'aumentare del numero, ho scoperto che il ritardo ha iniziato a diventare evidente a circa 50.000. Con Apache (e probabilmente anche con nginx), l'elenco è contenuto nella RAM, il che significa che con il set più grande che ho provato, ho potuto avviare solo un processo figlio all'interno della mia RAM disponibile.
Ladadadada,

1
@Ladadadada LOL. Ho appena controllato. Nginx utilizza 30 Mb di RAM per 100000 domini nella server_namedirettiva e rispondeRequest rate: 36900.6 req/s (0.0 ms/req)
VBart

1
60 Mb per 1 000 000 eRequest rate: 34716.8 req/s (0.0 ms/req)
Vart

È decisamente meglio di Apache gestito, almeno con MPork prefork. Comodo da sapere.
Ladadadada,

7

La server_namedichiarazione nel server {}blocco può essere un'espressione regolare, ciò dovrebbe consentire di abbinare s nome_server all'interno di un modello impostato.

Maggiori informazioni al riguardo sono disponibili qui: http://nginx.org/en/docs/http/server_names.html#regex_names


Grazie, ma non posso dichiarare il mio elenco di domini personalizzati in una singola espressione regolare. nome_server [zeus.domain.com | poseidon.domain.com | etc ...]; Sarebbe troppo lungo
Fred,

1
@fred Puoi fornire un set di dati di esempio? a meno che nessun dominio sia uguale all'altro, sarei abbastanza sicuro che un modello Regex risolverà il problema.
Oneiroi,

@Oneiroi: esempio use case = sottodomini generati dall'utente. Immagina un prodotto software-as-a-service in cui ogni utente ottiene il proprio sottodominio e desideri utilizzare Nginx per indirizzarlo a server diversi. In tal caso, nessun dominio è uguale all'altro.
m.stenta,

@ m.stenta ah, punto giusto. A meno che non ci sia un po 'di comunanza nei sottodomini, sì, regex non funzionerà. O avrai bisogno di legare la creazione di regex derivata dal dominio stesso che imho sconfigge lo scopo.
Oneiroi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.