Использование echo_read_request_body - абсолютно бесполезно, точнее просто вредно. Если пакет поднялся до фазы CONTENT, то для того чтобы выполнить if (значит попасть в фазу REWRITE) у него есть только один выход - выполнить проксирование. Но при использовании директивы proxy_pass переменная $request_body получит значение автоматически, то есть echo_read_request_body просто лишено смысла.
Скажем так - я не думаю, что njs станет узким местом. Но и делать так я точно не стал бы - сопровождать такое никакого желания. Решение только на случай если "можно использовать только nginx". Как вариант можно использовать https://github.com/calio/form-input-nginx-module:
Прототип решения по ссылке на форум вполне хорош. Нам нужно переместить обработку условия в CONTENT-фазу, njs вполне для этого подходит, применительно к примеру из статьи как-то так:
Тут помимо сказанного есть ещё и второй момент.
Если не делать дальнейшую постобработку 503-х, то данное решение может быть даже во вред. По сути здесь мы (частично) заменили отдачу 402-х на отдачу 503-х.
При этом 402-е мы отдавали в четвертой фазе, а 503-е будем отдавать сначала поднявшись до 9-й, опустившись до 4-й и снова поднявшись до 6-й. Да, это микросекунды, но решение получается абсурдным если отдача 402-х не предполагает существенно большего контента чем 503-е или если дальше не делать анализ логов на наличие 503-х, с перманентной блокировкой ботов и т.п.
Откуда смелое предположение что такого каталога не существует?/blockquote>
Почему предположение? Мы намеренно создаём рабочую для нас конфигурацию с отдачей контента на этапе NGX_HTTP_SERVER_REWRITE_PHASE. Каталоги/файлы для этого нам не нужны. Задача ведь в том, чтобы отдать контент как можно раньше, не дергая fpm, базу и т.д.
Я возможно заблуждаюсь, но при наличии оного вся эта изящная схема работает несколько не так как предполагается?
При наличии каталога данная схема и не должна работать, но наличие каталога "/pay" (в соответствующем «root») говорит о том, что мы хотим формировать контент «задействовав» данную директорию. То есть речь идёт о фазе NGX_HTTP_CONTENT_PHASE, следовательно описанная проблема уже и так не возникает, так как мы перешагнули этап NGX_HTTP_PREACCESS_PHASE.
Встречный вопрос: «Почему он должен быть?»
Описание местоположения не подразумевает создание каталога или файла.
Возможно, этот момент стоило указать явно, но в данном случае отдача контента осуществляется директивой return, поэтому наличие каталога не требуется (а точнее, наоборот, вредит).
Да, я про то что надо было поставить камеру.
С птичками, в целом, у меня не складывается — каждый год достаю гнездо из вентиляции.
В этом году решил-таки залезть на крышу, заделать сеткой все труб вентиляции.
Этот пример я уже приводил выше.
Так и должно работать, так как директивы модуля работают в фазе REWRITE:
Использование echo_read_request_body - абсолютно бесполезно, точнее просто вредно. Если пакет поднялся до фазы CONTENT, то для того чтобы выполнить if (значит попасть в фазу REWRITE) у него есть только один выход - выполнить проксирование. Но при использовании директивы proxy_pass переменная $request_body получит значение автоматически, то есть echo_read_request_body просто лишено смысла.
Скорее пример того насколько быстрее будет завершить обработку в REWRITE-фазе, чем в CONTENT
Маршруты пакета для обоих случаев:
19691
12263
6009
Время в наносекундах от ngx_http_handler:entry до ngx_http_finalize_request:return
Усредненное для 100000 "пустых" POST-запросов.
echo-nginx-module работает в CONTENT-фазе, там мы можем получить $request_body и без сторонних модулей.
Как всё это поможет проверить переменную $request_body в REWRITE-фазе?
Как это поможет установить значение в переменной $request_body?
Скажем так - я не думаю, что njs станет узким местом.
Но и делать так я точно не стал бы - сопровождать такое никакого желания. Решение только на случай если "можно использовать только nginx".
Как вариант можно использовать https://github.com/calio/form-input-nginx-module:
Но, опять же, спорное решение и в плане поддержки и в плане производительности.
Прототип решения по ссылке на форум вполне хорош.
Нам нужно переместить обработку условия в CONTENT-фазу, njs вполне для этого подходит, применительно к примеру из статьи как-то так:
По map есть отличная статья, но а данном случае он также не поможет.
Если не делать дальнейшую постобработку 503-х, то данное решение может быть даже во вред. По сути здесь мы (частично) заменили отдачу 402-х на отдачу 503-х.
При этом 402-е мы отдавали в четвертой фазе, а 503-е будем отдавать сначала поднявшись до 9-й, опустившись до 4-й и снова поднявшись до 6-й. Да, это микросекунды, но решение получается абсурдным если отдача 402-х не предполагает существенно большего контента чем 503-е или если дальше не делать анализ логов на наличие 503-х, с перманентной блокировкой ботов и т.п.
Описание местоположения не подразумевает создание каталога или файла.
Возможно, этот момент стоило указать явно, но в данном случае отдача контента осуществляется директивой return, поэтому наличие каталога не требуется (а точнее, наоборот, вредит).
Для старых версий действительно:
С птичками, в целом, у меня не складывается — каждый год достаю гнездо из вентиляции.
В этом году решил-таки залезть на крышу, заделать сеткой все труб вентиляции.
Нашёл свой и прослезился…
Когда ещё в Икею попаду…
Гарантированно умер только SBG-2.