精华内容
下载资源
问答
  • nginx日志报错显示:upstream timed out (110: Connection timed out) 开放被转发的后端tomcat的端口,直接用tomcat的接口地址进行获取数据,不经过nginx转发,验证是否会超时; 测试直接通过tomcat接口地址获取...

    环境:nginx转发后端tomcat接口,连接超时问题

    nginx日志报错显示:upstream timed out (110: Connection timed out)

    开放被转发的后端tomcat的端口,直接用tomcat的接口地址进行获取数据,不经过nginx转发,验证是否会超时;

    测试直接通过tomcat接口地址获取数据可以出来,但是时间超过了60s,nginx默认连接超过60s就会报连接超时;

    可以添加nginx的以下参数,要放在server配置节之内

    proxy_connect_timeout 300;

    proxy_read_timeout 300;

    proxy_send_timeout 300;

     

    #fastcgi_connect_timeout 300;

    #fastcgi_read_timeout 300;

    #fastcgi_send_timeout 300;

     

    你可以看到上面是proxy_和fastcgi_两种配置,就是说如果你的nginx后面是proxy,就设置proxy相关的配置,如果是fastcgi就设置fastcgi相关的配置。

     

    展开全文
  • 缘由:A项目用HttpURLConnection代理(B项目)内部接口的时候,返回值正常; 由于要走负载,nginx代理了几个A项目,通过nginx访问的时候,页面显示ERR_EMPTY_RESPONSE; nginx报错upstream sent invalid chunked ...

    缘由:A项目用HttpURLConnection代理(B项目)内部接口的时候,返回值正常;
    由于要走负载,nginx代理了几个A项目,通过nginx访问的时候,页面显示ERR_EMPTY_RESPONSE;
    nginx报错upstream sent invalid chunked response while reading upstream.

    原因

    http协议版本不一致导致

    解决方案

    在nginx.conf的location里加上

    proxy_http_version 1.1;
    proxy_set_header   Connection       "";

    举个例子

    location /redirect/ {
    	proxy_pass http://localhost:8080/;
    	proxy_http_version 1.1;
    	proxy_set_header   Connection       "";
    	proxy_set_header   Host             $host;
    	proxy_set_header   X-Real-IP        $remote_addr;
    	proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    	proxy_set_header   X-Forwarded-Proto $scheme;
    	proxy_cookie_path / /redirect;
    }

    完毕!

    展开全文
  • //upstream 接口 } } </code></pre> 我采用的是openresty 执行报如下错误: <pre><code> ==> error.log <== 2016/05/09 15:26:13 [error] 12279#0: *1 [lua] content_by_lua(nginx....
  • nginx报错upstream prematurely closed connection while reading response header from upstream 导致这样的问题原因是,上游服务器阻塞了,没有响应,然后导致接口无法连接,从nginx内部看http的tcp并没有建立连接...

    今天出现了一个这样的问题
    nginx报错upstream prematurely closed connection while reading response header from upstream

    导致这样的问题原因是,上游服务器阻塞了,没有响应,然后导致接口无法连接,从nginx内部看http的tcp并没有建立连接或者只是完成3次挥手的一半,然后服务器一直没有响应syn标记导致

    发现这样的问题之后,我的上游服务器使用的是uwsgi,于是我看了看我的uwsgi报错日志

    invalid request block size: 4139 (max 4096)...skip
    

    上面的问题很直观,说你的数据包大小是4139,最大是4096,所以是超过了,然后导致uwsgi无法处理,然后nginx无法得到响应,导致接口调用失败,nginx报错502

    解决办法:在uwsgi配置文件中加入一个配置

    buffer-size = 65536
    

    然后重启服务器解决问题!

    展开全文
  • nginx upstream的实现

    2016-04-20 15:10:20
    upstream模块还是一个http模块,所有它自己必须要实现一些特定的接口: 1.static ngx_command_t ngx_http_upstream_commands[] = {{ ngx_string("upstream"), NGX_HTTP_MAIN_CONF|NGX_CONF_BLOCK|NGX_CONF_TAKE1, n

    很多其他模块会调用该模块完成对后端服务器的访问
    upstream模块还是一个http模块,所有它自己必须要实现一些特定的接口:
    1.static ngx_command_t ngx_http_upstream_commands[] = {

    { ngx_string("upstream"),
    
      NGX_HTTP_MAIN_CONF|NGX_CONF_BLOCK|NGX_CONF_TAKE1,
    
      ngx_http_upstream,
    
      0,
    
      0,
    
      NULL },
    
    
    
    { ngx_string("server"),
    
      NGX_HTTP_UPS_CONF|NGX_CONF_1MORE,
    
      ngx_http_upstream_server,
    
      NGX_HTTP_SRV_CONF_OFFSET,
    
      0,
    
      NULL },
    
    
    
      ngx_null_command
    

    };
    //这里表明upstream是对upstream指令和内部的server指令感兴趣
    2.static ngx_http_module_t ngx_http_upstream_module_ctx = {

    ngx_http_upstream_add_variables,       /* preconfiguration */
    
    NULL,                                  /* postconfiguration */
    
    
    
    ngx_http_upstream_create_main_conf,    /* create main configuration */
    
    ngx_http_upstream_init_main_conf,      /* init main configuration */
    

    3.ngx_module_t ngx_http_upstream_module = {

    NGX_MODULE_V1,
    
    &ngx_http_upstream_module_ctx,         /* module context */
    
    ngx_http_upstream_commands,            /* module directives */
    
    NGX_HTTP_MODULE,                       /* module type */
    

    4.它的相关函数,可以类比http模块的处理方式:
    注意它内部也会有分配保存配置结构体的使用
    5.nginx的使用:
    在ngx_upstream_t结构体中会有五个回调函数指针,开发人员按需注册自己需要的函数,那么就可以使用upstream了
    那么所注册的hanlder回调函数,它的一般的流程是:
    1》创建一个ngx_upstream_t结构体
    2》申请一个请求上下文
    3》把该请求上下文设置到对应得模块中
    4》开始注册回调函数:
    u->create_request:设置创建请求报文的回调函数
    u->reinit_request:设置当连接失败以后需要执行的动作
    u->process_header:设置处理上游服务器的响应头回调函数
    u->finalize_request:销毁upstream请求的时候调用
    u->buffering:
    //upstream的标志位,为0时以下游网速优先,不会使用文件缓存,为1时有多个buffer,并且可以使用文件来缓存响应包体
    u->pipe:
    //当buffering为1时,会使用到该结构,即上游网速优先,需要使用多个buffer来缓存响应
    rc = ngx_http_read_client_request_body(r, ngx_http_upstream_init);
    //开始读取请求包体,并且调用ngx_http_upstream_init,该函数的作用是启动upstream机制,但是这里要注意一点在启动之前要设置一个ngx_http_upstream_conf_t配置结构体,它指定的是upstream的运行机制,
    6.upstream的运行过程:
    ngx_http_upstream_init:
    根据ngx_http_upstream_conf_t中的成员初始化upstream
    同时开始连接上游服务器
    具体流程:
    a.调用某个http模块实现的create_request方法构造出报文,
    b.调用ngx_http_upstream_connect向上游服务器发起连接
    c = u->peer.connection;
    c->data = r;
    //将客户端与上游服务器的连接的读写事件的处理回调设置为
    //ngx_http_upstream_handler
    c->write->handler = ngx_http_upstream_handler;
    c->read->handler = ngx_http_upstream_handler;
    //ngx_http_upstream_handler最后会调用u->write_event_handler或者read_event_handler
    u->write_event_handler = ngx_http_upstream_send_request_handler;
    u->read_event_handler = ngx_http_upstream_process_header;

    ngx_http_upstream_send_request(r, u);
    //代表已经建立连接,向上游服务器发送请求内容
    注意这里请求不是一次性就可以发送完的,所以需要多次加入epoll中进行监控,所以它最终调用ngx_http_upstream_send_request发送请求,但是如果一次性没有发送完的话就要调用上面的ngx_http_upstream_send_request_handler;发送
    c.当建立了与上游的连接以后就会向上游服务器发送请求,
    ngx_http_upstream_send_request:
    主要是调用ngx_output_chain向上游服务器发送请求报文
    紧接着就会调用 ngx_http_upstream_process_header(r, u);来解析响应头了,该函数是Http模块自己实现的
    d. ngx_http_upstream_process_header(r, u)
    接收到的响应头部存储到ngx_http_upstream_t的buffer缓冲区中,
    然后recv
    然后调用http模块自己实现的u->process header处理接收到的响应头,负责进行解析
    对解析出的错误头进行相关处理,比如返回404
    再次调用ngx_http_upstream_process_headers()把u->headers_in中的各个头部信息设置到r->headers_out中,以便于发送

    if (!r->subrequest_in_memory) {
    //调用该函数,先转发响应头,再转发响应体
    ngx_http_upstream_send_response(r, u);
    return;
    }
    //如果是父请求,需要转发响应体,就调用上面那个函数
    如果是子请求的话,使用子请求的input_filter进行处理
    默认的input_filter是不转发
    u->read_event_handler = ngx_http_upstream_process_body_in_memory//设置接收事件的处理函数,
    ngx_http_upstream_process_body_in_memory(r, u);
    这个是处理子请求的情况,即不转发包体的情况,在内存中对包体进行处理
    e.处理响应包体:
    在子请求中不需要转发包体,只是处理一下就可以,在父请求的模式下需要转发包体,这时有上游网速优先和下游网速优先俩种情况,如果下游网速优先,那么就需要分配一块固定大小的buffer去接收缓冲区,同时进行转发,如果上游网速优先的话,那么就需要更多的buffer去缓冲数据,同时还可能使用临时文件
    ngx_http_upstream_process_body_in_memory(r, u);:该函数用来处理子请求,即不转发响应包,即subrequest_in_memory=1的时候使用这种处理方式,它会调用http模块实现的input_filtr方法处理接收到的包体,如果http模块没有实现,那么就调用默认的ngx_http_upstream_non_buffered_filter,如果实现了那就使用http实现的input filter,注意这个input_filter方法的实现其实最主要的是对buffer的使用
    ngx_http_upstream_send_response:该函数用来处理父请求,即转发响应包体的情形,且同时考虑上下游速度的情况,他会根据ngx_http_upstream_conf_t中的buffering标志决定是否打开缓存处理,为0默认下游更快
    它会根据不同的设置调用不同的转发方式:
    调用ngx_http_send_header向下游客户端发送http包头,即发送headers_out中的头部
    //c是客户端与nginx之间建立的连接
    c = r->connection;
    //将header_sent置位,表示响应头部已经发送了
    u->header_sent = 1;
    接下来是清除请求中的临时文件
    //获得http core在该loc下的配置
    clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
    //u->buffering为0表示下游网速优先,不需要开辟更多的缓存区
    //来存放相关回应报文
    ** if (!u->buffering) {
    //未设置input_filter的话,设置默认的处理函数,input_filter是对
    //在buffer中接收到的数据进行相应处理,感觉主要有两个功能
    //一是把相关buffer挂到out链表,一是对内容进行过滤
    if (u->input_filter == NULL) {
    //啥都不做
    u->input_filter_init = ngx_http_upstream_non_buffered_filter_init;
    //该函数试图在buffer中缓存所有的数据,会操作设置ngx_buf中的
    //各个字段
    u->input_filter = ngx_http_upstream_non_buffered_filter;
    u->input_filter_ctx = r;
    //设置upstream读事件的处理回调函数,当上游服务器接收到响应的时候可以调用这个接收响应
    u->read_event_handler = ngx_http_upstream_process_non_buffered_upstream;

    //设置request写事件的处理回调函数,一旦向客户端的tcp连接上可写的时候调用这个函数
    r->write_event_handler =
               ngx_http_upstream_process_non_buffered_downstream;
    

    接下来的代码继续设置Buffer的相关指针,
    调用input_filter方法处理包体(http模块没有实现的话就用默认的)
    //在该函数中,开始向下游客户端发送响应包体,
    //发送完数据还会从上游接收包体
    ngx_http_upstream_process_non_buffered_downstream(r);
    //有数据可以进行处理,处理上游数据,在该函数中
    //收完上游包体也会往下游发送相应。即接收上游包体
    if (u->peer.connection->read->ready) {
    ngx_http_upstream_process_non_buffered_upstream(r, u);
    }
    注意上述俩个函数的底层是ngx_http_upstream_process_non_bufferd_request
    **如果bufferinf=1,那么就代表着需要更多的缓存去缓冲数据,这个时候需要一个ngx_event_pipt_t结构体来实现转发
    对包头的转发同样是ngx_http_send_header
    ngx_http_upstream_process_non_buffered_downstream(r)
    ngx_http_upstream_process_non_buffered_upstream(r, u);
    实现,但是底层是ngx_event_pipe实现,通过一个参数标记来控制读写方向
    ngx_event_pipe_read_upstream和
    ngx_event_pipe_write_to_downstream实现
    f.结束upstream请求:
    当nginx与上游服务器的交互出现错误时,或者正常处理完请求时,就需要结束请求,这个时候不能简单的调用ngx_http_finalize_request结束请求,这样无法结束upstream请求,
    upstream提供了俩个独特的方法,一个是ngx_http_upstream_cleanup和ngx_http_upstream_next
    在启动upstream的时候,ngx_http_upstream_cleanup会挂载到请求的cleanup链表中,Http框架在结束请求的时候会调用该方法,而该方法实际上是调用了ngx_http_upstream_finalize_request结束请求的

    当处理请求出现错误的时候,往往会调用Ngx_http_upstream_next方法。这是upstream提供的一个比较灵活的方法,比如出错时并不是立刻结束请求,而是再尝试连接一次。

    ngx_http_upstream_request_finalize的实现:
    它的主要功能就是清理与上游服务器的交互资源,然后调用框架提供的ngx_http_finalixe_request.

    展开全文
  • 年前接到个任务,说要解决线上一些手机客户端接口报错率很高的问题.拿到了监控邮件,粗略一看,各种50%+的错误率,简直触目惊心.这种疑难杂症解决起来还是挺好玩的,于是撸起袖子action. 最终的结果虽然报错问题得到了...
  • 前端请求接口,执行一段时间之后,返回404错误,但是接口文件还在的。按照如下设置,问题解决:   First figure out which upstream is slowing by consulting the nginx error log file and adjust the read ...
  • <div><p>如果发送删除命令到rest api接口,最后走到的函数是 static ngx_int_t ngx_dyups_do_delete(ngx_str_t <em>name, ngx_str_t </em>rv) { ngx_int_t dumy; ngx_http_dyups_srv_conf_t *duscf; <pre>...
  • 年前接到个任务,说要解决线上一些手机客户端接口报错率很高的问题.拿到了监控邮件,粗略一看,各种50%+的错误率,简直触目惊心.这种疑难杂症解决起来还是挺好玩的,于是撸起袖子action. 最终的结果虽然报错问题得到了...
  • kong添加upstream

    2019-02-18 10:43:00
    整理的文档比较早,kong版本...1.开放几个接口如下: 本地请求1:http://aaa.wyc.com:8888/aaa 返回:server_name:aaa.wyc.com,port:8888 本地请求2:http://aaa.wyc.com:8889/aaa 返回:server_name:aaa.wyc.c...
  • 与前端联调接口时,出现http状态码...upstream sent too big header while reading response header from upstream, client: 192.168.0.213, server: localhost, request: “GET /videogo/user-proxy/user/user_me...
  • ngx_http_upstream_conf_module 模块允许通过简单的 HTTP 接口即时配置上游(upstream)服务器组,而无需重新启动 nginx。http 或流服务器组必须驻留在共享内存中。 该模块作为商业订阅部分提供, 示例配置 ...
  • 接口,并且nginx存在upstream timed out错误log。 (1)nginx配置(version:1.15.8) server { listen 8989; server_name localhost; location / { proxy_pass http://localhost:9999; .
  • nginx自带的upstream配置,如果后端挂了,接口会慢,原因不讲述,故接入第三方的自动检测与自动踢除模式 nginx_upstream_check_module模块: *** 下载地址...
  • 最近项目要写后台,用nodejs写服务接口,然后研究了下nginx反向代理,各种坑下来,也总算把代理配了下来。  我本地用nodejs起了两个服务,一个端口是8888,一个端口是8889,在启动nginx服务后,可以直接访问...
  • 一、nginx 作PHP的web接口服务器,在线上发现时不时经常崩溃...[error] 11618#0: *324911 upstream timed out (110: Connection timed out) while reading response header from upstream, client:解决方法: [...
  • 背景: 某接口日志status 499超时,request_time记录到时间为5s,upstream_request_time为空. 解析: 客户端提交请求超时时间为5s,也就能解析request_time全部记录的都是5s,upstream_request_time为空,nginx与php...
  • 反向代理和负载均衡的区别fastcgi动态程序交互接口如phpurl_hash (web 缓存节点,图片服务器),ip_hash(会话保持)一致性 HASH 缓存问题 max_conns 最大连接数(可以压力测试用上) 转载于:...
  • 在这里,可以使用淘宝团队研发的nginx_upstream_check_module模块对服务器主动健康检查,定时检查某个接口,只要这个接口没有报500,就认为该服务器没有异常 至于安装这个模块,在这里就不多讲了,自行百度一下 源码...
  • @[TOC](Nginx访问异常问题: Permission denied) while connecting to upstream) 第一次搭建服务器,使用Nginx做负载,一切就绪后访问服务接口发现返回了502 gateway 问题解决步骤如下 1. 定位原因 1.1 查看ngigx日志...
  • 对系统的某个接口进行极限压测,随着并发量上升,nginx开始出现502 no live upstreams while connecting to upstream的报错,维持最大并发量一段时间,发现调用接口一直返回502,即nginx已经发现不了存活的后端了。...
  • 笔者在根据nginx的accesslog中$request_time进行程序优化时,发现有个接口,直接返回数据,平均的$request_time也比较大。原来$request_time包含了用户数据接收时间,而真正程序的响应时间应该用$upstream_response_...
  • 概要描述首先,我们先从官方文档了解:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_next_upstream经过仔细阅读了解发现,这部分内容与...非幂等请求若可以重试的接口,需要使用者手动指定no...
  • 问题描述:最近公司需要使用nginx做nodejs的反向代理,upstream 大致配置如下:upstreamnodejs{ ip_hash; server192.168.12.10:1088; server192.168.12.11:1088; }最近监控发现nginx+nodejs做的webservice接口...
  • 通过dyups的http接口修改upstream内容(去除掉后端10.90.101.177:2000): <pre><code> # curl -d "hash $request_uri consistent;server 10.90.101.177:1996;server 10.90.101.177:1997;...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 192
精华内容 76
关键字:

upstream接口