имената на сървъра
имена на сървъри са определени с помощта на директиви SERVER_NAME и решени да бъдат обработвани или тази, в която сървър блок заявка. Вижте. Освен "как Nginx искания процеси". Имената могат да бъдат определени точно, с помощта на маска или регулярен израз:
При търсене на виртуален сървър по име, ако името отговаря на някои от тези опции, например, по едно и също време за квалификация и името на маската, а регулярния израз ще изберете първия подходящ вариант в следния ред на приоритет:
- точното име
- най-дългото име на маската в началото, като "* .example.org"
- най-дългото име на маската в края, като "поща. *"
- първото съвпадение на регулярния израз (в реда, в конфигурационния файл)
Имена с маски
Името на маската може да съдържа звездичка ( "*"), само в началото или в края на името, но само на определено място. Имената на "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.