nginx 取不到返回值的分析过程

       由nginx负载遇到一个取不到返回值的问题:

         第一步先put,状态码:200 "PUT /api/execut
         第二步get返回值,状态码:500 "GET /api/preview?
        我尝试过解决办法:
           1.试不同的配置方法
           1.1 配置通用的匹配
                location / {
                 }
         1.2:  根据上下
                 location /app
                  }
                  location /api {     
               }
           2.tengine2.2 与nginx1.9.2 版本对比,返回结果还是一样
          3.用了charles抓包,看到get的数据回来了,nginx却取不到,返回500状态码
           4.tenginx 打开debug,error 等常规调试日志跟踪,没发现有价值的信息,也许是我忽略了........
          

       关闭后直接传输:
       

 
           5.看源码.......
          这问题很少见,折腾了两天,最后是定位出nginx这层配置的问题,但不知道原因在哪。最后竟是nginx 的buffer原因。
          设置 proxy_buffering off
          具体原因是nginx 为每个请求设置buffer ,一个请求对应条buffer,而这里程序a发出请求,建立了一个buffer_a,同时程序里又写新加一条请求b,返回值在buffer_b里,这时前端在等着buffer_a数据,而buffer_a是没有这条数据的,在buffer_b呢。
         so ,对于这种情况最直接的办法就是关闭proxy_buffer off.    
        相关参数
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源码分析(8)——phase handler处理 nginx将请求的处理过程划分为11个phase(阶段),相当于是对请求处理的一种抽象,便于定制处理过程。这个11个phase,分别是(定义在http/ngx_http_core_module.h): typedef enum { NGX_HTTP_POST_READ_PHASE = 0, /* 读请求 */ NGX_HTTP_SERVER_REWRITE_PHAS 阅读详情

相关推荐

相控阵多功能雷达工作模式识别技术综述

本文综述了相控阵雷达工作模式识别技术的研究进展。首先介绍了相控阵雷达的典型工作模式分类及其信号特征参数,包括搜索模式(VS、RWS、TWS)、跟踪模式(STT、MTT、TAS)和其他模式(SAM、SAR)等。随后重点阐述了基于信号特征的识别方法,包括时域特征(PRI分析、脉冲幅度包络、数据率)、频域特征(载频变化、调制方式)和混合特征分析方法。最后讨论了当前技术面临的挑战与发展趋势,包括复杂信号环境下的识别难题、新型雷达技术的适应需求以及深度学习技术的应用前景。该领域的研究对电子侦察和威胁评估具有重要意义。

Grow into a more wonderful you 1712

(待解决)java项目,nginx代理,请求200,但页面返回空白,响应体为空

nginx代理,请求200,但无返回

weixin_47443266的博客 9175

小米路由器安装Misstar tools 和MIXBOX

1.该教程适用于如下路由器: 小米路由器1代硬盘版(R1D) 小米路由器mini(R1CM) 全新小米路由器硬盘版(R2D) 小米路由器3(R3) 小米路由器3G(R3G) 小米路由器Pro(R3P) 小米路由器HD(R3D) 2.Misstar2.0在线安装 方法如下: 1.根据路由器对应文件解压文件,把解压目录(比如小米3路由器为R3)和offline_install.sh到U盘根目录,并插入路由器 2.ssh登录后,cd到U盘的目录,比如小米3路...

wybarcelona的博客 2万+

nginx部署前端项目 nginx部署无法加载js/css问题 Uncaught SyntaxError: Unexpected token ‘<‘

注意:将多个html项目放在一个server中出现js,css加载不出来问题。可以将文件放在主项目同级目录下(暂时解决,可能是静态资源配置问题,不会弄)。6.处理所有引用的部分前面加上,在conf中添加的映射路径。5.普通html项目,部署会出现以下错误。3.修改nginx.conf文件。4.修改端口防止占用和添加新映射。2.将项目放入html目录下。1.下载nginx,解压。

weixin_43091752的博客 6884

nginx配置之后接口状态200,但是无返回数据问题小记

nginx配置可能有问题。导致nginx不能解析PHP文件,检测nginx里对于php的配置信息。 location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$...

weixin_30449239的博客 4640

centos nginx代理无返回值的问题

今天跟前端调试的时候发现,在用户登录的一系列请求中,有一个请求没有返回值,开始的时候认为是代码逻辑出错,但单独调试代码发现功能没有问题,然后就怀疑是否是nginx拦截掉了返回值,故而在nginx中加入打印返回值的功能 一.安装打印返回值插件 1.安装openresty nginx不具有打印返回值的功能,需借用openresty实现,官网也是如此推荐的:https://www.nginx.co...

feiying00544的博客 4116

Nginx404页面的http状态码返回200的问题解决方法

问题 今天配置nginx服务器404页面的时候发现的一个问题 百度上搜索nginx配置404页面 很多网站贴出的代码如下: fastcgi_intercept_errorson; error_page 404 = /404.html; 根据上述实际配置好,访问一个不存在的页面,确实可以跳转到配置的404页面 但是发现这时候服务器返回的http状态码却是200 这对搜索引擎收录网站有很大影响 解决...

无枫的博客,分享Java及Vue方向的技术文章 2899

nginx配置解析过程分析

nginx在启动,reload和平滑升级时,都会重新加载配置。重新加载配置分成两步: 1. 重新加载命令行参数(-g)中定义的全局配置 2. 重新加载配置文件中的配置 解析配置的核心函数是ngx_conf_parse,不论是解析命令行定义的全局配置还是解析配置文件内容,最终都会调用该函数。函数的原型如下: char *ngx_conf_parse(ngx_conf_t *cf, n

qiuhui00的专栏 1419

Nginx返回值

最近使用Nginx过程中发现不同的场景下,Nginx返回的错误码是不同的。为了以后便于分析问题,做个记录:   504 Nginx收到Client的请求后,转发给后端,如果后端处理时间过长,超时后会返回504,GateWay Timeout。默认的到后端连接时间为60s ...

liukaixiansheng的专栏 1530

nginx 模块分析

nginx 模块】

qq_37674060的博客 1264

Python+Django+Nginx+Uwsgi 详细部署过程(爬坑过程

这个部署,我真的是爬了好久的坑,才爬出来,所以给大家分享一下,避免入坑。 首先我们先了解一下相关知识: wsgi: 一种实现python解析的通用接口标准/协议,是一种通用的接口标准或者接口协议,实现了python web程序与服务器之间交互的通用性。 利用它,web.py或bottle或者django等等的python web开发框架,就可以轻松地部署在不同的web server上了;...

趙尒七 2991

Nginx源代码分析之connect(四)

static ngx_int_t ngx_iocp_add_event

namelcx的专栏 1989

612错误 nginx转发200_nginx上,http状态200响应,PHP空白返回的问题

最近的大半年中,编程语言从PHP换到了Golang后,就很少接触PHP,当然,更多的还是恋恋不舍。尽管如此,每当有人在群里聊起PHP的话题时,我总是想插几句,怀念怀念,同时也温故温故知识点,可不能把她给忘了。昨天朋友tywei问我一个关于PHP奇怪问题,查到原因解决后,没有详细的解释。夜里睡觉时,老是回想这事,早上醒来,决定还是认真记录一下这些问题。也让自己回归正常状态,多写点博客,总结自己,记录...

weixin_42367221的博客 1200

nginxrequest中的cookie并在response中返回

开发时,遇到一个棘手问题,调用别人的接口,但是需要将request中的cookie作为参数传递。 由于我们域名下的 cookie httpOnly属性为 true,所以前端无法使用 document.cookie 获。 找到的解决方案有: 一、通过后台接口获cookie【我想出来的方案】 后台获到$_REQUEST中的cookie,并从接口返回给前端 二、通过配置nginx作为响应头传递【领导还是你领导,赞👍】 location ^~ /yjymoa/itsm...

qq_24917475的博客 4903

nginx的return语法使用

nginx的return语法使用

qq_34953582的博客 2837

ngx之return

return

1030

vue项目配置nginx页面跳转正常,接口报200,但是没数据

(We’re sorry but XXX doesn’t work properly without JavaScript enabled)很抱歉,如果没有启用JavaScript,XXX无法正常工作 这个问题碰到过两次,还都挺麻烦的,也都是因为相同的原因造成的错误。 一、描述下问题:nginx代理跳转页面都可以进去,接口返回报200,但是就是没数据,response返回(We’re sorry but XXX doesn’t work properly without JavaScript enabl

Liw_J的博客 6726

vue项目配置nginx页面跳转正常,接口报200,但是没数据(很抱歉,如果没有启用JavaScript,XXX无法正常工作)

一、描述下问题:nginx代理跳转页面都可以进去,接口返回报200,但是就是没数据,response返回(We’re sorry but XXX doesn’t work properly without JavaScript enabled)很抱歉,如果没有启用JavaScript,XXX无法正常工作 二、解决方案 nginx的配置: 我的所有后端服务器接口都是静态json文件(但其实json文件或者后端接口道理都一样) 云服务器的nginx只能用80端口,但是配置了三个项目。于是nginx里的配置如下:

han_xiao_xiao的博客 9839

详解PCB高速信号电路设计中的布线规则资料下载

PCB板的设计是电子工程师的必修课,而想要设计出一块完美的PCB板也并不是看上去的那么容易。一块完美的PCB板不仅需要做到元件选择和设置合理,还需要具备良好的信号传导性能。本文将详解PCB高速信号电路设计中的布线规则。

上一篇: 参加2015 qcon 回来的分享及年末做一次内部“监控演进分享”
下一篇: 阅读博客 添加收藏 nginx动态代理方案
ronon77
博客等级 码龄15年 96粉丝 746原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值