使用lua-resty-websocket建立到另一个nginx的连接的方案?

118 views
Skip to first unread message

jeffrey jiang

unread,
Oct 27, 2017, 1:31:01 AM10/27/17
to openresty
Hi all :       
       有这样一个场景,浏览器需要和一个服务进行websocket通信,然后浏览器与这个服务之间有两层nginx,我需要做到:浏览器->nginx(第一层)->nginx(第二层)->服务(C++)的通信,当然也包括反向的通信,之间都是websocket的通信方式。
       打算使用lua-resty-websocket完成这个场景。在第一层nginx中,需要在lua文件里通过recv_frame获取ws包进行一些简单的业务处理,例如防攻击,代码如下:
       
           config:#############################
           location ~/whatever { 
               proxy_set_header PROXY_IP  $x_real_ip;
               proxy_set_header CLIENT_IP $x_real_ip;
               proxy_set_header clientip $x_real_ip;
               proxy_set_header Upgrade $http_upgrade;
               proxy_set_header Connection "upgrade";
               proxy_http_version 1.1;
  
               access_by_lua_file brg-lua/ws_chat.lua;
               #proxy_pass http://whatever-upstream
           }


           ws_chat.lua:############################# 
           local wb, err = server:new{
               timeout = 10000,  -- in milliseconds
               max_payload_len = 65535,
           } 
           while true do
               local data, typ, err = wb:recv_frame();
               ... --业务处理
               --TODO:关于到第二层nginx如何建立连接并进行通信仍存在一些疑问。
           }

     简单贴了一段测试代码,有几个点不太明白,想请教大家:
     1. 这里如果要满足我的场景,我是需要在lua里通过库提供的函数建立到第二层的websocket连接,然后起两个light thread做与第二层nginx的收据收发?有更加简洁的方法吗?比如能不能有办法做到让proxy_pass来完成这种需求?
     2. 这里的while(true)循环是否会影响nginx的并发?
     THX , :)
Reply all
Reply to author
Forward
0 new messages