nginx: порядок вирішення "ім'я сервера"?


8

У мене є декілька блоків "сервера" в моєму nginx.conf. Документація здається неправильною щодо порядку, в якому відбувається узгодження імені сервера.

Мій конф. Виглядає приблизно так:

server {
  listen 80
  server_name domain.com *.domain.com

  # do stuff
}

server {
  listen 80
  server_name sub.domain.com *.sub.domain.com

  # do something else
}

Я намагаюся з'ясувати, чому запити з хостом = www.sub.domain.com переходять у потрібне місце (другий сервер), коли в документації зазначено, що він повинен переходити на перший сервер.

Документація Nginx вказує на те, що серверні блоки перевіряються "на порядок" відповідності, тобто будь-який запит з хостом * .sub.domain.com повинен бути зафіксований на першому сервері, а не на другому сервері. ( http://wiki.nginx.org/HttpCoreModule#server_name )

Крім того, * wildcard відповідає будь-якій кількості піддоменних частин, тому * .domain.com відповідає www.sub.domain.com. ( http://nginx.org/en/docs/http/server_names.html#wildcard_names )

Якщо ця документація невірна, який фактичний порядок узгодження?

Відповіді:


18

З документації nginx ( http://nginx.org/en/docs/http/server_names.html ):

Під час пошуку віртуального сервера за іменем, якщо ім’я відповідає більш ніж одному із зазначених варіантів, наприклад, як ім'я підстановки, так і збіг регулярних виразів, буде обраний перший варіант узгодження у такому порядку пріоритетності:

  1. точна назва
  2. найдовша назва підстановки, що починається зірочкою, наприклад "* .example.org"
  3. найдовше ім'я підстановки, що закінчується зірочкою, наприклад, "mail. *"
  4. перший збіг регулярного виразу (у порядку появи у файлі конфігурації)

2

Документація говорить:

Порівняє заголовок хоста вхідного запиту HTTP проти сервера {...} блоків у файлах конфігурації Nginx та вибирає перше, що відповідає.

Що, здається, трапляється, це те, що він вибирає найкращу відповідність з усіх serverблоків, таким чином www.sub.domain.com, узгоджуючи другу конфігурацію. У мене немає жодної документації, яка б підтверджувала це, тому ви можете провести кілька тестів, щоб підтвердити цю поведінку. Існує також цей документ, який говорить про дозвіл імен.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.