Hello!
2013/10/17 G_will:
>
> 春哥好,因为看到 lua-nginx-module 文档中提到,v0.9.0 以后 ngx.req.socket 可以开启 raw 调用
> receive、receiveuntil、send 方法。所以我想将 nginx 做成一个简单的 tcp server ,nginx 配置如下:
>
ngx.req.socket(true) 在调用时,nginx 已经读取并解析完 HTTP 请求头了。所以这个接口不能用于实现最一般的 TCP 服务器。
这个接口的目的是允许用户自己读取最原始的 HTTP 请求体数据,或者绕过 nginx 的输出过滤器机制,直接发送最原始的 HTTP
响应头和响应体数据,当然,它也可以用于实现像 WebSocket 这样的 HTTP 升级协议。
>
> 但是使用 nc 127.0.0.1 1234 访问,发送什么都返回 400 错误,我的理解是,直接使用 socket 连接还是要经过 nginx 的
> http 检查,所以到不了 location 里的 lua 逻辑。那么这个问题怎么解决呢?或者是这样做(nginx作为tcp server)可以吗?
>
这是 ngx_tcp_lua_module 的使命,而不是当前的 ngx_http_lua_module :)
bigplum 同学先前做过这样的尝试:
https://github.com/bigplum/nginx-tcp-lua-module
Regards,
-agentzh