У меня довольно большой и медленный (комплекс данных, сложный интерфейс) сборки веб - приложений в RoR
и обслуживается Puma
с в nginx
качестве обратного прокси - сервера. Глядя на nginx
журнал ошибок, я вижу довольно много записей, таких как:
2014/04/08 09:46:08 [warn] 20058#0: *819237 an upstream response is buffered to a temporary file
/var/lib/nginx/proxy/8/47/0000038478 while reading upstream,
client: 5.144.169.242, server: engagement-console.foo.it,
request: "GET /elements/pending?customer_id=2&page=2 HTTP/1.0",
upstream: "http://unix:///home/deployer/apps/conversationflow/shared/sockets/puma.sock:/elements/pending?customer_id=2&page=2",
host: "ec.reputationmonitor.it",
referrer: "http://ec.foo.it/elements/pending?customer_id=2&page=3"
Мне довольно любопытно, так как очень маловероятно, что страница остается одинаковой для разных пользователей и разных взаимодействий пользователей, и я не думаю, что буферизация ответа на диске необходима / полезна.
Я знаю об этом proxy_max_temp_file_size
и устанавливаю его в 0, но мне это кажется немного неловким (мой прокси пытается буферизовать, но не имеет файла, куда его буферизовать ... как это может быть быстрее?)
Мои вопросы:
Как я могу удалить [предупреждение] и избежать буферизации ответов? Лучше выключить
proxy_buffering
или установитьproxy_max_temp_file_size
на 0? Почему?Если
nginx
буферизует ответ: когда он обслуживает буферизованный ответ, кому и почему?Почему по умолчанию
nginx
включаетсяproxy_buffering
, а затем [предупреждает] вас, если он на самом деле буферизует ответ?Когда ответ вызывает эту опцию? Когда для ответа требуется> несколько секунд (сколько?)? Это настраивается?
TIA, нгв.
Ответы:
Вы должны установить
proxy_max_temp_file_size
в 0, чтобы удалить его.proxy_buffering
Директива напрямую не связана с предупреждением. Вы можете отключить его, чтобы вообще прекратить буферизацию, но это вообще не рекомендуется (если только это не нужно для Comet ).Он сразу же работает на сервере, но клиент, как правило, имеет гораздо более медленное соединение и не может использовать данные ответа так же быстро, как они создаются вашим приложением. Nginx пытается буферизовать весь ответ, чтобы освободить ваше приложение как можно скорее.
Смотрите также: http://aosabook.org/en/nginx.html
Как я уже упоминал,
proxy_buffering
это не имеет прямого отношения к предупреждению. Как правило, он необходим для оптимизации операций прокси-сервера, а его отключение снижает производительность и пропускную способность.Nginx предупреждает вас только тогда, когда ответ не помещается в настроенные буферы памяти. Вы можете игнорировать предупреждение, если это хорошо для вас.
Это срабатывает, когда буферы памяти заполнены. Пожалуйста, посмотрите на документы, весь механизм объяснен: http://nginx.org/r/proxy_max_temp_file_size
Вы можете увеличить буферы памяти.
источник
proxy_max_temp_file_size
значение0
или это только способ убрать это предупреждение?Следующая конфигурация прекрасно работает на моем сервере.
источник
16k
первая строка делает то же самое, что и вторая строка?Sets the size of the buffer used for reading the first part of the response received from the proxied server. This part usually contains a small response header
. Proxy_buffers для остальной части ответа.