Почему мы должны прочитать тело запроса перед выполнением подзапроса с использованием OpenResty / nginx lua?

Мы частично делегируем управление доступом nginx отдельной службе, и мы используем access_by_lua_file и lua-resty-hawk и подзапросы для проверки подлинности запроса.

Документы говорят:

Вы должны всегда читать тело запроса (либо вызывая ngx.req.read_body, либо настраивая lua_need_request_body on) перед началом подзапроса.

Первоначально мы упустили эту деталь, казалось, все работает. Я пытался найти дополнительную справочную информацию по этому требованию, но оказался пустым.

Было бы неплохо авторизовать запрос перед прочтением тела, поскольку мы можем разорвать соединение раньше и предотвратить некую DoS-атаку, если клиенты просто пытаются загрузить все виды нежелательной почты и заполнить наш диск.

Почему это ограничение на месте?

1 ответ

Поскольку никто не ответил на этот вопрос, я хочу уточнить причину, просто цитируя официальную документацию.

always_forward_body если задано значение true, тело запроса текущего (родительского) запроса всегда будет перенаправлено в создаваемый подзапрос, если body опция не указана. Тело запроса, прочитанное с помощью ngx.req.read_body() или lua_need_request_body on, будет напрямую переадресовано подзапросу без копирования всех данных тела запроса при создании подзапроса (независимо от того, данные тела запроса буферизуются в буферах памяти или временных файлах), По умолчанию эта опция имеет значение false, а когда опция body не указана, тело запроса текущего (родительского) запроса передается только тогда, когда подзапрос принимает метод запроса PUT или POST.

Короче говоря, если тело параметра не указано, можно использовать тело текущего запроса, поэтому сначала вам нужно прочитать тело запроса.

Как видите, это не является обязательным, поэтому в вашем случае все оказалось работающим.

Другие вопросы по тегам