在我们的应用程序配置中,nginx在gunicorn前充当反向代理.
我们的应用程序回复前端请求,一般来说,响应很小……但是一些端点生成的响应大于一个内存页面(4K).
发生这种情况时,nginx会记录此警告:
an upstream response is buffered to a temporary file
/path/to/nginx/proxy_temp/4/86/0000000864 while reading upstream,client: 1.2.3.4,server: api.ourdomain.com,request: "GET /pdf/..."
我们的nginx日志最终充斥着这个警告 – 据我所知,从我们的日志中消除此警告的唯一解决方案是不好的解决方案:
>我可以将nginx proxy_max_temp_file_size设置为0 – 基本上禁用缓冲大数据响应.这将停止对文件的缓冲 – 但这也意味着对于生成大响应的端点(例如,生成1-2MB响应的PDF生成),缓慢消耗的客户端会阻止相应的gunicorn工作者…事实上,如果有是N个gunicorn工作者,它只会让N个客户在慢速网络连接后生成PDF,我们的应用程序将会崩溃…
>我可以将proxy_buffer_size增加到4K以上(一个内存页面,即).我很确定这会对nginx性能产生严重影响 – 我们70%的响应确实适合4K,我们会强制nginx分配……什么?每个缓冲区都有2MB缓冲区,只是为偶尔的PDF生成请求做好准备?编辑:事实上这根本不是一个选项 – 迈克尔(下图)评论说,唯一允许的值是4K和8K.
>我可以关闭proxy_buffering – 但这和第一个解决方案一样糟糕(慢客户端=>死亡).
本质上,nginx将我们的日志充斥到我们想要的东西 – 当响应很大时临时缓冲到文件.
我们只是想阻止这个充斥我们的日志,通过“标记”它不是一个真正的警告(我甚至不确定为什么这是一个警告 – 什么“坏事”它警告我们?)
除了编辑nginx的源代码和重新编译之外,还有其他我缺少的解决方案吗?
https://www.nginx.com/resources/admin-guide/logging-and-monitoring/
error_log logs/error.log warn;
messages of warn,error crit,alert,and emerg levels are logged.
The default setting of the error log works globally. To override it,place the error_log directive in the main (top-level) configuration context. Settings in the main context are always inherited by other configuration levels. The error_log directive can be also specified at the http,stream,server and location levels and overrides the setting inherited from the higher levels.
关于缓冲的那一行是在警告级别:
[warn] 30055#0: *1428 an upstream response is buffered to a temporary file
因此,如果您确保错误日志级别未设置为警告,即将其保留为默认值或减小它,则您将不再看到该警告.以下任何一种解决方案都会抑制它们:
保留默认值(级别’错误’及以上):
error_log logs/error.log;
一样:
error_log logs/error.log error;
您还可以将阈值提高到超出错误范围,直至暴击,警报和紧急情况.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。