Используйте NGINX для замены тела из proxy_pass
Я новичок в openresty/nginx
и я пытаюсь заменить тело, полученное в результате более раннего вызова proxy_pass, на следующий код:
body_filter_by_lua_block {
ngx.arg[1] = '{"count"' .. ":2}'
ngx.arg[2] = true
}
У меня изначально не было линии для ngx.arg[2] = true
, но я получу обратно тело дважды (это означает, что тело, которое я заменяю, имеет 2 куска?). Я добавил в ngx.arg[2] = true
строка и теперь вывод из запроса выглядит хорошо. Когда я разверну nginx
файл, служба выглядит хорошо для нескольких запросов, то nginx
запросы начинают зависать. Является ли правильная / лучшая практика для замены тела ответа? Что мне делать вместо этого?
1 ответ
В body_filter_by_lua_block
:
ngx.arg[1]
текущий кусок тела ответа.
ngx.arg[2]
это флаг конца файла. Я часто вижу этот флаг установлен в отдельном body_filter_by_lua_block
вызов, когда ngx.arg[1]
является nil
,
Вот почему вы видели свою строку дважды.
Флаг EOF выше имеет доступ на чтение / запись, поэтому, если вы установите его true
это означает просто выбросить все оставшиеся данные чанка.
Изменение содержания тела работает для меня нормально, даже я провел некоторое тестирование производительности, никогда не видел зависаний при использовании этого.
PS: не забудьте включить header_filter_by_lua_block { ngx.header.content_length = nil }
если вы измените тело.
Также могут быть некоторые хитрости со сжатым контентом.