Извиняюсь, если на этот вопрос уже дан ответ или он задокументирован, но я был сбит с толку этим, поэтому я надеюсь, что сообщество может дать некоторое представление.
Пример ниже специально для proxy_pass
и proxy_set_header
config, но мой общий вопрос больше похож на «Hкак конфигурация Nginx вообще обрабатывает порядок?» Тип вопроса.
Я наткнулся на рабочую конфигурацию nginx с таким блоком местоположения:
location / {
proxy_pass http://internal.example.com/req;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-User $auth_resp_x_user;
}
Это смутило меня, так как у меня всегда было впечатление, что порядок имеет значение, и заголовки должны быть установлены ДО proxy_pass
линия. Например:
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-User $auth_resp_x_user;
proxy_pass http://internal.example.com/req;
}
Вопросов:
- Действительно ли порядок имеет значение?
- Если здесь это не имеет значения, относится ли это к proxy_pass? Это имеет значение в других строках конфигурации nginx, верно?
- Задокументирован ли где-нибудь этот тип заказа/приоритета? (Извините, если что, не вижу)
Спасибо за любое понимание и помощь.
1 ответ
В целом конфигурация nginx является декларативной. Это означает, что каждая директива конфигурации влияет на определенный отдельно определенный этап обработки запроса.
Это означает, что в целом порядок директив внутри конкретной области не имеет значения.
Однако есть исключения из общего правила:
location
блоки, соответствующие регулярным выражениям, зависят от порядка. Первый соответствующий блок используется для обработки запроса.rewrite
модуль обрабатывает директивы императивно
Единственная ссылка на этот факт, которую я смог найти, находится в ЕслиЗло статья.
Земля Килканен