• 美美
    2019-08-22
    老师,TFO和四层的keepalive有什么区别?

    作者回复: TFO建连接时的技术,keepalive用于关连接

    
    
  • 妥协
    2019-06-15
    请教老师,什么是两次写操作的超时,两次读操作的超时?正常超时不是针对一次操作的超时吗?比如说读请求,10s没有影响就超时

    作者回复: 这个要从TCP报文层面来理解。当Nginx所在服务器接收到一个TCP的数据报文时,可以理解为一个读操作;当Nginx调用write方法,可以理解为一个写操作。我的《Web协议详解与抓包实战》第5部分课程会结合抓包对此过程解释。

    
    
  • 只争朝夕1990
    2019-02-27
    老师,
    可我进行了抓包,确实是nginx没及时发出去,等60发过去之后,服务端已经超时了才回的400。而且这些请求都是前端框架发的,应该不至于有问题(连接成功的概率也不小)。
    
    
  • 只争朝夕1990
    2019-02-26
    老师好,
    我是按照您给我的网址配置的,websocket连接时好时坏(连不上的概率大概是20%)
    我的nginx配置如下:
    location /api/socket.io {
      proxy_http_version 1.1;
      proxy_buffering off;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_pass http://socketio_nodes/socket.io;
      error_log /home/xkool/volume/log/chenyuan.log debug;
    }
    然后我加了debug日志,发现####连的上####的情况下,debug日志如下:
     49 2019/02/26 15:36:25 [debug] 16712#0: *887 writev: 661 of 661
     50 2019/02/26 15:36:25 [debug] 16712#0: *887 chain writer out: 0000000000000000
     51 2019/02/26 15:36:25 [debug] 16712#0: *887 event timer del: 19: 1551166645770
     52 2019/02/26 15:36:25 [debug] 16712#0: *887 event timer add: 19: 60000:1551166645770
     53 2019/02/26 15:36:25 [debug] 16712#0: *887 http upstream request: "/api/socket.io/?EIO=3&transport=polling&t=MaekxjO &sid=366b9fc32e2a42e595b703f4d02075bd"
     54 2019/02/26 15:36:25 [debug] 16712#0: *887 http upstream process header
     55 2019/02/26 15:36:25 [debug] 16712#0: *887 malloc: 00000000026B8450:4096
    ####连不上####的情况,日志如下:
     49 2019/02/26 15:36:25 [debug] 16715#0: *893 writev: 661 of 661
     50 2019/02/26 15:36:25 [debug] 16715#0: *893 chain writer out: 0000000000000000
     51 2019/02/26 15:36:25 [debug] 16715#0: *893 event timer del: 13: 1551166645863
     52 2019/02/26 15:36:25 [debug] 16715#0: *893 event timer add: 13: 60000:1551166645863
     53 2019/02/26 15:37:25 [debug] 16715#0: *893 http upstream request: "/api/socket.io/?EIO=3&transport=polling&t=Maekxkt &sid=366b9fc32e2a42e595b703f4d02075bd"
     54 2019/02/26 15:37:25 [debug] 16715#0: *893 http upstream process header
     55 2019/02/26 15:37:25 [debug] 16715#0: *893 malloc: 00000000026819B0:4096
     56 2019/02/26 15:37:25 [debug] 16715#0: *893 recv: eof:0, avail:1
     57 2019/02/26 15:37:25 [debug] 16715#0: *893 recv: fd:13 137 of 4096
     58 2019/02/26 15:37:25 [debug] 16715#0: *893 http proxy status 400 "400 BAD REQUEST"
    ########分界线##########
    可以看出#连不上#的情况下第52行、53行之间有个60秒的间隔,也就是说nginx等了60秒才转发我的请求到上游(可是这个时候上游的socket已经关了),抓包也验证了如上行为。请问什么情况下会出现这个呢?我没有设置任何limit
    展开

    作者回复: 看日志,不像是连接不上,而是读取响应超时。最后即使读取响应未超时,返回的也是400。是不是你的请求格式不正确,导致websocket服务器拒绝返回?readtime_out定时器超时?

    
    
  • 只争朝夕1990
    2019-02-23
    连接websocket时候,会有请求在nginx,但是无法转发到上游,导致连接无法连上(抓包的时候发现,收到websocket请求后,等待有60秒才将请求转发至上游)。

    老师,请问可能引起,nginx收到消息后,有什么可能的原因导致无法转发或者延迟转发至上游?

    作者回复: nginx配置websocket了吗?参见http://nginx.org/en/docs/http/websocket.html

    
    
我们在线,来聊聊吧