由nginx负载遇到一个取不到返回值的问题:
关闭后直接传输:
proxy_buffer_size
语法: proxy_buffer_size the_size
默认值: proxy_buffer_size 4k/8k
上下文: http, server, location
该指令设置缓冲区大小,从代理后端服务器取得的第一部分的响应内容,会放到这里.小的响应header通常位于这部分响应内容里边.默认来说,该缓冲区大小等于指令 proxy_buffers所设置的;但是,你可以把它设置得更小.
proxy_buffering
语法: proxy_buffering on|off
默认值: proxy_buffering on
上下文: http, server, location
该指令开启从后端被代理服务器的响应内容缓冲.如果缓冲区开启,nginx假定被代理的后端服务器会以最快速度响应,并把内容保存在由指令proxy_buffer_size 和 proxy_buffers指定的缓冲区里边.如果响应内容无法放在内存里边,那么部分内容会被写到磁盘上。如果缓冲区被关闭了,那么响应内容会按照获取内容的多少立刻同步传送到客户端。nginx不尝试计算被代理服务器整个响应内容的大小,nginx能从服务器接受的最大数据,是由指令proxy_buffer_size指定的.
对于基于长轮询(long-polling)的Comet 应用来说,关闭 proxy_buffering 是重要的,不然异步响应将被缓存导致Comet无法工作
proxy_buffers
语法: proxy_buffers the_number is_size;
默认值: proxy_buffers 8 4k/8k;
上下文: http, server, location
该指令设置缓冲区的大小和数量,从被代理的后端服务器取得的响应内容,会放置到这里. 默认情况下,一个缓冲区的大小等于内存页面大小,可能是4K也可能是8K,这取决于平台。
proxy_busy_buffers_size
语法: proxy_busy_buffers_size size;
默认值: proxy_busy_buffers_size proxy_buffer_size * 2;
上下文: http, server, location, if
TODO: Description.
buffer工作原理
首先第一个概念是所有的这些proxy buffer参数是作用到每一个请求的。每一个请求会安按照参数的配置获得自己的buffer。proxy buffer不是global而是per request的。
proxy_buffering 是为了开启response buffering of the proxied server,开启后proxy_buffers和proxy_busy_buffers_size参数才会起作用。
无论proxy_buffering是否开启,proxy_buffer_size(main buffer)都是工作的,proxy_buffer_size所设置的buffer_size的作用是用来存储upstream端response的header。在proxy_buffering 开启的情况下,Nginx将会尽可能的读取所有的upstream端传输的数据到buffer,直到proxy_buffers设置的所有buffer们被写满或者数据被读取完(EOF)。此时nginx开始向客户端传输数据,会同时传输这一整串buffer们。同时如果response的内容很大的话,Nginx会接收并把他们写入到temp_file里去。大小由proxy_max_temp_file_size控制。如果busy的buffer传输完了会从temp_file里面接着读数据,直到传输完毕。
一旦proxy_buffers设置的buffer被写入,直到buffer里面的数据被完整的传输完(传输到客户端),这个buffer将会一直处在busy状态,我们不能对这个buffer进行任何别的操作。所有处在busy状态的buffer size加起来不能超过proxy_busy_buffers_size,所以proxy_busy_buffers_size是用来控制同时传输到客户端的buffer数量的。
http://www.ioutlier.com/nginx-proxy-buffer-works/
相关推荐
通过以上概述,我们可以看出《Nginx开发指南》不仅是一份技术文档,更是一份全面深入的技术手册,它不仅介绍了Nginx的基本概念和技术细节,还涵盖了开发实践中的最佳做法,是Nginx开发者不可或缺的参考资料。
2. **404 Not Found**:404错误意味着服务器找不到处理请求的资源。这可能是URL错误,也可能是服务器部署配置的问题。在确认URL无误后,需要检查Tomcat服务器的部署根目录是否设置为`/webapp`,并确保网页地址的格式...
5. **USR2** 信号:用于平滑升级可执行程序,例如在不中断服务的情况下更新Nginx版本。 接下来,我们讨论如何使用 **curl** 在Linux环境中发送HTTP请求并查看返回值,这对于调试和测试Nginx配置非常有用。 **虚拟...
在本文中,我们将详细探讨如何进行Nginx 1.8.0版本到1.9.7版本的平滑升级过程。平滑升级是确保Web服务器在不中断服务的情况下更新软件的重要方法,这对于保持系统安全性和性能至关重要。 首先,确认当前运行的Nginx...
4. 日志处理:通过Lua脚本收集、分析和处理Nginx的日志,便于监控和优化服务性能。 5. RESTful API开发:使用Lua实现API接口,支持JSON等数据格式,提供RESTful服务。 总之,《Lua程序设计》不仅介绍了Lua语言的...
本文将详细解析如何在 CentOS 7 环境下,通过 Keepalived 和 Nginx 实现服务器之间的负载均衡和故障切换,确保服务的不间断。 Keepalived 是一个基于 VRRP (Virtual Router Redundancy Protocol, 虚拟路由冗余协议)...
OpenResty是一个基于Nginx和LuaJIT的高性能Web平台,它允许开发者将Lua脚本直接嵌入到Nginx配置中运行,从而提供一个灵活且高性能的Web应用服务器环境。本篇文档旨在介绍OpenResty的最佳实践,涵盖从基础概念到高级...
解决跨域请求的方法有多种,包括JSONP、引用A站的JS、Nginx做A站的反向代理、后端服务放开跨域请求等。其中,后端服务放开跨域请求是最常用的方法。 知识点4:Spring Boot中放开跨域请求 在Spring Boot中放开跨域...
在这一阶段,Nginx根据请求的URL找到匹配的location配置,这涉及到配置文件中的正则表达式和普通路径的比较。 4. NGX_HTTP_REWRITE_PHASE (URI转换阶段) 这是另一个进行URL转换的阶段,通常用于更复杂的URL重写规则...
OpenResty的环境搭建是一个相对复杂的过程,因为需要考虑到不同操作系统的特性。文档中提到了在Windows平台、CentOS平台、Ubuntu平台和Mac OS X平台上的安装方法,这是确保OpenResty应用正常运行的先决条件。 在...
- **返回类型声明**:允许函数指定返回值类型,增强了代码的类型安全性。 - ** scalar type hints**:支持对int, string, bool和float等基本类型进行类型提示。 - **空合并运算符(??)**:用于在变量不存在或值为...
Lua的设计受到了Scheme和Modula的影响,支持过程式编程、面向对象编程和函数式编程等编程范式。 Lua的一个重要特点是它具有可扩展性,支持通过C/C++扩展其功能。LuaJIT是Lua的一个高效解释器版本,它使用即时编译...
Lua是一种轻量级的脚本语言,它小巧且功能强大,非常适合嵌入到应用程序中作为扩展脚本语言。在OpenResty中,Lua主要用于编写业务逻辑,处理HTTP请求,以及与Nginx的其他功能模块进行交互。它的动态类型系统、自动...
通过对sendError方法的分析,发现发送错误页面后直接return ANALYSIS_ERROR,这启发开发者在发送目录完成后也使用类似的方式,但为了提高代码可读性,他们将返回值更改为ANALYSIS_DIR_SUCCESS。此外,尝试使用Nginx...
【百汇百通 登录验证demo】是一款演示了如何实现登录验证功能的示例程序,主要针对中文URL乱码和多参数上传与返回值处理等问题提供了完善的解决方案。在这个项目中,我们将深入探讨登录验证的基本原理、中文URL乱码...
8. HTTPS 握手过程中用到哪些技术? 知识点:HTTPS 握手过程中使用了 SSL/TLS 协议,包括密钥交换、证书验证、加密和 MAC 验证等技术。 9. Linux 中 PHP 环境,已知 disable_functions=exec,passthrupopen,proc_...
通过分析递归调用的过程和条件,可以得出最终的结果为 3。 #### 5. Java 中的静态方法 - **特点**:静态方法属于类而非实例,因此不需要创建对象就可以访问。 - **访问限制**:静态方法只能访问静态成员变量,而不...