имената на сървъра

имена на сървъри са определени с помощта на директиви SERVER_NAME и решени да бъдат обработвани или тази, в която сървър блок заявка. Вижте. Освен "как Nginx искания процеси". Имената могат да бъдат определени точно, с помощта на маска или регулярен израз:

При търсене на виртуален сървър по име, ако името отговаря на някои от тези опции, например, по едно и също време за квалификация и името на маската, а регулярния израз ще изберете първия подходящ вариант в следния ред на приоритет:

  1. точното име
  2. най-дългото име на маската в началото, като "* .example.org"
  3. най-дългото име на маската в края, като "поща. *"
  4. първото съвпадение на регулярния израз (в реда, в конфигурационния файл)

Имена с маски

Името на маската може да съдържа звездичка ( "*"), само в началото или в края на името, но само на определено място. Имената на "WWW. *. Example.org" и "w * .example.org" са неправилни, но може да се настрои с помощта на регулярни изрази, като "

^ W. * \. Пример \ .org $ ". Звездичката може да съответства на няколко части на името. Името на маската "* .example.org" съответства не само www.example.org. но www.sub.example.org.

Специално наименование с тип маска ".example.org" съответства както на точното име "example.org", и маската "* .example.org".

Имена, определени от регулярните изрази

Регулярните изрази се използват в Nginx може, в съответствие с тези, използвани в Perl език за програмиране (PCRE). Името на сървъра е посочено регулярен израз трябва да започва с тилда:

в противен случай тя ще се счита за точна, или ако изразът съдържа звездичка ( "*"), както е името на маската (и най-вероятно неправилно). Не забравяйте да поставите началото на специалните знаци ( "*") и в края ( "$") линия. Те не се изисква от синтаксиса, но логично те могат да бъдат необходими. Също така имайте предвид, че всички условия, в имената на домейни трябва да са избягали с обратна наклонена черта. Регулярните изрази съдържащ знаците " <” и “> "Трябва да се избягва:

в противен случай Nginx ще откаже да започне и да се показва съобщение за грешка:

Кръстен разпределение след това могат да бъдат достъпни чрез променлива в регулярен израз:

PCRE библиотеката поддържа име селекция с помощта на следния синтаксис:

Съвместим с Perl 5.10 синтаксис се поддържа, тъй като PCRE-7.0

Python-съвместим синтаксис, подкрепено, тъй като PCRE-4.0

Ако Nginx отказва да работи и дава съобщение за грешка:

това означава, че вие ​​използвате версия на библиотеката PCRE стар, а вместо това трябва да се опита на синтаксиса "? P ". Можете да използвате и номерирани освобождаване:

Въпреки това, подобно използване следва да бъде ограничен до прости случаи, както в примера по-горе, тъй като номериран изолация може лесно да бъде заменена.

Други имена

Някои имена имат специално значение.

Ако е необходимо да се разглеждат заявленията без поле "Host" заглавие в устройството на сървъра. което не е основния сървър, уточни празен име:

Ако директива server_name не е уточнено в блока на сървъра. След това Nginx ще използва празен име като името на сървъра.

Nginx версии до 0.8.48 в този случай, използвайки името на хоста (хост) на машината, както е името на сървъра.

Ако името на сървъра е дадена като "$ име на хост" (0.9.4), тя използва името на хоста (хост) на машината.

В примера, процесът на конфигурацията на сървъра всички искания, отговаря странно име "_":

Това не е някакъв специален, това е само един от многото неправилни имена на домейни, които никога не се пресичат с някой от истинските имена. Със същия успех може да използвате имена като "-" и "@ #!".

Nginx версии до 0.6.25 поддържа специално име "*", която много погрешно се възприема като името на сървъра, за да се справи с всички искания. Тя никога не е било така е работил и не работи като име с маска. Това име се управлява по същия начин, както е в момента действа директива server_name_in_redirect. Специалното име "*" не се използва и трябва да се използва вместо директивата server_name_in_redirect. Имайте предвид, че с помощта на директивата за server_name не можете да посочите всяко име на сървъра, за да се справи с всички искания или сървър, по подразбиране. Това е един имот слушате директива. вместо server_name. Вижте. Освен "как Nginx искания процеси". Можете да конфигурирате сървъра слуша на портове *: 80 и *: 8080, и посочи, че един от тях ще бъде пристанище на сървъра по подразбиране *: 8080, а другата - за порт *: 80:

оптимизация

Точните имена, имена с маски, които започват със звездичка, както и имената на маски, завършващи със звездичка, се съхраняват в три хеш таблици, свързани с порта за слушане. Размери хеш таблици са оптимизирани за фазата на конфигурация, така че името може да се намери с минимален брой пропуски в кеша на процесора. Още при съгласуване на хеш таблици се обсъжда в отделен документ.

Първото име е погледна нагоре в таблицата хашиш на точните имена. Ако не е установено името, името се погледна в имената на хеш таблица с маски, като се започне със звездичка. Ако няма резултати от търсенето, името се погледна в имената на хеш таблица с маски, завършващ със звездичка.

Търси в имената на хеш таблица с маски по-бавно от търсене на хеш таблица с точните имена, защото имената са сравнени с помощта на част от домейн. Имайте предвид, че специално име с тип маска ".example.org" се съхранява в имената на хеш таблица с маски, а не в хеш таблица с точните имена.

Регулярните изрази са тествани последователно, и затова е най-бавно и слабо мащабируема метод.

За гореописаните причини предпочита да се използват точните имена, когато това е възможно. Например, ако сървърът често се споменава по име example.org и www.example.org. тя ще бъде по-ефективно, за да ги посочите изрично:

вместо да използва опростена форма:

Ако зададете на голям брой сървъри за имена, или да зададете необичайно дълго имена, може да се наложи да се коригира директивите на ценности server_names_hash_max_size и server_names_hash_bucket_size на HTTP. В директивите за неизпълнение server_names_hash_bucket_size може да бъде равна на 32, 64 или друга стойност, в зависимост от размера на кеша на процесора линия. Ако стойността по подразбиране е 32, а името на сървъра е дадена като "too.long.server.name.example.org", след това Nginx ще откаже да започне и да се показва съобщение за грешка:

В този случай е необходимо да се увеличи стойността до следващия директива силата на две:

Ако зададете на голям брой сървъри за имена, вие ще получите ново съобщение за грешка:

В този случай, трябва първо да се опита да установи server_names_hash_max_size на стойност близо до броя на имената на сървърите, и само ако това не работи, или на началната Nginx става неприемливо високо, трябва да се опита да увеличи server_names_hash_bucket_size.

Ако сървърът е единственият сървър за слушател порта, а след това Nginx няма да проверява името на сървъра на всички (и няма да се изгради хеш-таблица за порта за слушане). С едно изключение: ако името на сървъра е посочено регулярен израз със секрети, е необходимо да се извърши nginx'u този израз, за ​​да се получат стойностите на емисиите.

съвместимост

  • Специално името на сървъра "$ име на хост" се поддържа от версия 0.9.4.
  • По подразбиране името на сървъра е празен низ "" От версия 0.8.48.
  • Кръстен избор на имена на сървъри, определени с помощта на регулярни изрази са подкрепени от версия 0.8.25.
  • Разпределяне на сървъра за имена, посочени чрез регулярни изрази са подкрепени от версия 0.7.40.
  • Празно име на сървъра "" се поддържа от версия 0.7.12.
  • Маската или регулярен израз, можете да посочите като първото име на сървъра, от версия 0.6.25.
  • Регулярните изрази се поддържат в името на сървъра, от версия 0.6.7.
  • Имена с тип маска на пример. * Поддържани от версия 0.6.0.
  • Специална форма на името .example.org тип поддържа от версия 0.3.18.
  • Имена с тип маска * .example.org подкрепени от версия 0.1.13.