Nginx: tysiące nazwa_serwera

12

jak mogę skonfigurować Nginx do tysięcy różnych nazw serwerów bez tworzenia tysięcy zewnętrznych plików konfiguracyjnych lub pisania bardzo długiej linii nazw serwerów?

Rzeczywiście, chciałbym, aby Nginx był odwrotnym proxy tylko dla server1.com, server2.com itp.

Najlepszym rozwiązaniem dla mnie byłoby posiadanie jednego zewnętrznego pliku konfiguracyjnego zawierającego moje ograniczone nazwy serwerów: server1.com, server2.com itp.

Czy to możliwe ?


Ok, dziękuję za odpowiedzi, działa bez rejestracji. wyrażenia. Po prostu duża lista nazw serwerów, jak wyjaśnia kolbijack. Dzięki.

Fred
źródło
powinieneś zaakceptować odpowiedź kolbijack, jeśli to ta pomogła.
Oneiroi

Odpowiedzi:

19

Możesz umieścić dyrektywę nazwa_serwera w pliku samodzielnie, a następnie po prostu dołączyć ją z bloku serwera:

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

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

Plik server_names potrzebuje tylko server_name u góry i; na dole ma być ważna dyrektywa.

kolbyjack
źródło
Uważaj na opóźnienia / opóźnienia wyszukiwania / użycie pamięci RAM, jeśli to zrobisz. Przeprowadziłem testy z dużymi listami (około 5000 ServerAliasdyrektyw i do 16 milionów Deny fromdyrektyw) w Apache. 5000 domen daje wymierne, ale niewielkie opóźnienie. Zwiększając liczbę, zauważyłem, że opóźnienie zaczęło być zauważalne przy około 50 000. W przypadku Apache (i prawdopodobnie także w przypadku nginx) lista jest przechowywana w pamięci RAM, co oznaczało, że przy największym zestawie, jaki próbowałem, mogłem uruchomić tylko jeden proces potomny w ramach dostępnej pamięci RAM.
Ladadadada,
1
@Ladadadada LOL. Właśnie sprawdziłem. Nginx używa 30 MB pamięci RAM na 100 000 domen w server_namedyrektywie i odpowiadaRequest rate: 36900.6 req/s (0.0 ms/req)
VBart
1
60 Mb za 1 000 000 orazRequest rate: 34716.8 req/s (0.0 ms/req)
VBart
To znacznie lepiej niż Apache zarządzał, przynajmniej w przypadku prefabrykatów MPM. Przydaje się wiedzieć.
Ladadadada,
7

server_nameDeklaracja w server {}bloku może być wyrażeniem regularnym, powinno to pozwolić na dopasowanie SERVER_NAME s ciągu ustalonego wzoru.

Więcej informacji na ten temat można znaleźć tutaj: http://nginx.org/en/docs/http/server_names.html#regex_names

Oneiroi
źródło
Dziękuję, ale nie mogę zadeklarować mojej listy domen niestandardowych w jednym wyrażeniu regularnym. nazwa_serwera [zeus.domain.com | poseidon.domain.com | etc ...]; To by było za długie.
Fred
1
@fred Czy możesz podać przykładowy zestaw danych? chyba że żadna domena w ogóle nie jest taka jak druga. Byłbym całkiem pewien, że wzorzec Regex rozwiąże problem.
Oneiroi,
@Oneiroi: przykład użycia przypadku = poddomeny wygenerowane przez użytkownika. Wyobraź sobie produkt będący usługą, w którym każdy użytkownik otrzymuje własną subdomenę, a chcesz używać Nginx do kierowania ich na różne serwery. W takim przypadku żadna domena w ogóle nie jest taka jak druga.
m.stenta
@ m.stenta ah, fair point. O ile nie ma podobieństw w subdomenach, tak, wyrażenie regularne nie zadziała. Albo będziesz musiał powiązać tworzenie wyrażenia regularnego pochodzącego z samej domeny, która imho pokonuje cel.
Oneiroi