nginx反向代理skynet

nginx作为一个web服务器和反向代理服务器,能够使web服务器和逻辑单独分离,也可以作为负载均衡服务器。基于这些优点,可以使用nginx反向代理skynet,即skynet监听本地的一个socket端口,收到请求后处理逻辑,然后返回结果。nginx和skynet可以同一台机器上,也可以在不同的机器上。
新建一个skynet服务并启动起来,当收到请求后简单返回一条信息
local skynet = require "skynet"
local socket = require "socket"
local httpd = require "http.httpd"
local sockethelper = require "http.sockethelper"

skynet.start(function()
    local id = socket.listen("0.0.0.0", 8008)
    skynet.error("Listen  port 8008")
    socket.start(id , function(id, addr)
        socket.start(id)
        httpd.write_response(sockethelper.writefunc(id), 200,"this is a http response");
        socket.close(id);
    end)
end)
启动起来后log如下,监听8008端口
[:01000001] LAUNCH logger
[:01000002] LAUNCH snlua bootstrap
[:01000003] LAUNCH snlua launcher
[:01000004] LAUNCH snlua cmaster
[:01000004] master listen socket 0.0.0.0:2013
[:01000005] LAUNCH snlua cslave
[:01000005] slave connect to master 127.0.0.1:2013
[:01000006] LAUNCH harbor 1 16777221
[:01000004] connect from 127.0.0.1:49321 4
[:01000004] Harbor 1 (fd=4) report 127.0.0.1:2526
[:01000005] Waiting for 0 harbors
[:01000005] Shakehand ready
[:01000007] LAUNCH snlua datacenterd
[:01000008] LAUNCH snlua service_mgr
[:01000009] LAUNCH snlua main
Server start
[:0100000a] LAUNCH snlua testnginx
[:0100000a] Listen  port 8008
[:01000009] KILL self
[:01000002] KILL self
nginx配置
server {
        listen       8020;
        server_name  localhost;

        location ~ /server$ {
        proxy_pass http://192.168.18.201:8008;
        proxy_set_header X-Real-IP $remote_addr;
        }

}
将所有以server为uri的请求全部转向skynet的8008端口上。
重新加载nginx,用浏览器打开http://localhost:8020/server会收到一条信息显示在浏览器上。
this is a http response
skynet已经自带了一个simpleweb例子,可以直接使用,还有一些解析header的代码,自己可以修改体验下skynet作为web服务器使用。

发表评论