server de nume

nume de servere sunt definite folosind directivele SERVER_NAME și determinate să fie prelucrate sau cea în care serverul de interogare bloc. A se vedea, de asemenea, „Cum Nginx cererile de procese“. Numele pot fi setate cu precizie, folosind o mască sau o expresie regulată:

Atunci când căutați un server virtual după nume, în cazul în care numele corespunde câteva dintre aceste opțiuni, de exemplu, în același potrivesc timp și numele măștii, și expresia regulată va selecta prima opțiune potrivită în următoarea ordine de prioritate:

  1. numele exact
  2. cel mai lung nume al măștii de la început, cum ar fi „* .example.org“
  3. cel mai lung nume al măștii la final, cum ar fi „e-mail. *“
  4. expresia regulată prima potrivire (în ordinea în fișierul de configurare)

Nume cu măști

Numele măștii poate conține un asterisc ( „*“), numai la începutul sau la sfârșitul numelui, dar numai pe punctul definit. Denumirile „www. *. Example.org“ și „w * .example.org“ sunt incorecte, dar pot fi stabilite prin utilizarea de expresii regulate, cum ar fi "

^ W. * \. Exemplu \ .org $. " Un asterisc pot corespunde mai multor părți ale numelui. Numele masca „* .example.org“ corespunde nu numai www.example.org. dar www.sub.example.org.

Denumirea specială cu mască de tip „.example.org“ corespunde atât numele exact «example.org», iar masca «* .example.org».

Nume specificate de expresii regulate

Expresiile regulate sunt utilizate în Nginx ar putea, în concordanță cu cele utilizate în limbajul de programare Perl (PCRE). nume de server specificat expresie regulată trebuie să înceapă cu o tilda:

în caz contrar aceasta va fi considerată ca fiind exacte, sau în cazul în care expresia conține un asterisc ( „*“) ca numele masca (și cel mai probabil incorecte). Nu uitați să puneți începutul caractere speciale ( „*“) și ( „$“), linia de final. Ele nu sunt cerute de sintaxa, dar în mod logic, ele pot fi necesare. De asemenea, rețineți că toți termenii din numele de domenii trebuie să fie scăpat cu un backslash. O expresie regulată care conține caracterele " <” и “> „Trebuie să fie scăpat:

în caz contrar Nginx va refuza să pornească și afișează un mesaj de eroare:

Alocarea numele poate fi accesat printr-o variabilă într-o expresie regulată:

Biblioteca PCRE sprijină numit selecție folosind următoarea sintaxă:

Compatibil cu Perl 5.10 sintaxa este acceptată deoarece PCRE-7.0

sintaxa compatibile Python, susținută deoarece PCRE-4.0

Dacă Nginx refuză să curgă și dă un mesaj de eroare:

aceasta înseamnă că utilizați o versiune veche a bibliotecii PCRE, și ar trebui să încerce în schimb sintaxa „? P “. Puteți utiliza, de asemenea, eliberarea numerotate:

Cu toate acestea, o astfel de utilizare ar trebui să se limiteze la cazuri simple ca în exemplul de mai sus, deoarece izolarea numerotat pot fi ușor înlocuite.

alte nume

Unele nume au o semnificație specială.

În cazul în care este necesar pentru procesarea cererilor fără domeniu din titlu „gazdă“ în unitatea de server. care nu este serverul implicit, specificați un nume gol:

În cazul în care Directiva server_name nu este specificată în unitatea de server. atunci Nginx va utiliza un nume gol ca nume de server.

Versiunile Nginx până la 0.8.48, în acest caz, folosind numele de gazdă (nume de gazdă) al mașinii ca numele serverului.

Dacă numele serverului este dat ca „$ nume de gazdă“ (0.9.4), se folosește numele de gazdă (nume de gazdă) al mașinii.

În exemplu, procesul de configurare a serverului toate cererile, se întâlnește un nume ciudat „_“:

Nu este un fel de special, este doar unul dintre multele nume de domeniu incorecte care nu se intersectează cu oricare dintre numele reale. Cu același succes, puteți utiliza nume precum „-“ și „@ #!“.

Versiunile Nginx până la 0.6.25 acceptă un nume special „*“, pe care mulți perceput în mod greșit ca numele serverului să se ocupe de toate cererile. Acesta nu a fost niciodată atât de lucrat și nu a funcționat ca un nume cu o mască. Acest nume este operat în același mod în care acționează în prezent Directiva server_name_in_redirect. Numele special „*“ este învechită și ar trebui să fie utilizat în locul directivei server_name_in_redirect. Rețineți că utilizarea directivei nume_server nu poate specifica nici un server de nume pentru a gestiona toate cererile sau un server, în mod implicit. Aceasta este o proprietate a asculta directivă. în loc de server_name. A se vedea, de asemenea, „Cum Nginx cererile de procese“. Puteți configura serverul pe porturile *: 80 și *: 8080, și a subliniat că una dintre ele va fi portul de server implicit *: 8080, iar celălalt - pentru portul *: 80:

optimizare

Numele exacte, nume cu măști, începând cu un asterisc, și numele de măști, care se încheie cu un asterisc, sunt stocate în trei tabele de dispersie, legat de portul de ascultare. tabele de dispersie Dimensiunile sunt optimizate în faza de configurare, astfel încât numele poate fi găsit cu un număr minim de ratări în cache-ul procesorului. Mai mult de tuning tabelele hash este discutată într-un document separat.

Primul nume este privit în sus în tabelul hash a numelor exacte. Dacă numele nu a fost găsit, numele este privit în sus, în numele hash cu măști de masă, începând cu un asterisc. În cazul în care nu există rezultate de căutare, numele este privit în sus, în numele hash tabel cu măști, care se încheie cu un asterisc.

Căutați în numele tabelă de dispersie cu măști mai lent decât căutarea unui tabel hash de nume exacte, deoarece numele sunt comparate folosind partea de domeniu. Rețineți că un nume special, cu o mască de tip „.example.org“ este stocat în numele hash tabel cu măști, mai degrabă decât într-un tabel hash de nume exacte.

Expresiile regulate sunt testate secvențial, și, prin urmare, este cel mai lent și prost scalabile metoda.

Din motivele de mai sus, de preferat să se folosească numele exacte, ori de câte ori este posibil. De exemplu, în cazul în care serverul frecvent se face referire prin numele example.org și www.example.org. acesta va fi mai eficiente pentru a le descrie în mod explicit:

în loc să utilizeze o formă simplificată:

Dacă specificați un număr mare de servere de nume, sau a seta un nume neobișnuit de lungi, poate fi necesar să se adapteze directivele valorile server_names_hash_max_size și server_names_hash_bucket_size la http. Directivele implicite server_names_hash_bucket_size poate fi egal cu 32, 64 sau altă valoare, în funcție de dimensiunea procesorului linie de cache. Dacă valoarea implicită este de 32, iar numele serverului este dat ca „too.long.server.name.example.org“, atunci Nginx va refuza să pornească și afișează un mesaj de eroare:

În acest caz, este necesar să se mărească valoarea până la următoarea putere directivă a două:

Dacă specificați un număr mare de servere de nume, veți primi un alt mesaj de eroare:

În acest caz, ar trebui să încercați mai întâi să se stabilească server_names_hash_max_size la o valoare apropiată de numărul de nume de servere, și numai în cazul în care acest lucru nu funcționează, sau Nginx start-up devine inacceptabil de mare, ar trebui să încerce să crească server_names_hash_bucket_size.

Dacă serverul este singurul server pentru portul ascultător, atunci nginx nu va verifica numele serverului de la toate (și nu va construi un tabel hash pentru portul de ascultare). Cu o singură excepție: dacă numele serverului este specificat expresie regulată cu secrețiile, este necesar să se efectueze nginx'u această expresie pentru a obține valorile emisiilor.

compatibilitate

  • Numele de construcții server „$ hostname“ este acceptat în versiunea 0.9.4.
  • server de nume implicit este un șir gol „“ Începând cu versiunea 0.8.48.
  • selecție Numit în numele specificat un server folosind expresii regulate sunt suportate începând cu versiunea 0.8.25.
  • Alocarea în serverul de nume specificat folosind expresii regulate sunt suportate începând cu versiunea 0.7.40.
  • Numele de server gol „“ este acceptată, deoarece versiunea 0.7.12.
  • Masca sau expresie regulată, puteți specifica ca primul nume al serverului de la versiunea 0.6.25.
  • Expresiile regulate sunt acceptate în numele serverului de la versiunea 0.6.7.
  • Nume cu un tip mască de exemplu. * Sprijinit de la versiunea 0.6.0.
  • O formă specială a numelui .example.org tip acceptat începând cu versiunea 0.3.18.
  • Nume cu un tip de mască * .example.org susținută începând cu versiunea 0.1.13.