是否可以将NON-http连接请求转发到nginx中的其他端口?

时间:2011-03-17 09:24:17

标签: http tcp nginx

我在我的服务器上运行nginx,监听端口80和433.我知道nginx有多种端口转发方式,允许我将请求转发到http://myserver:80/subdir1之类的地址,例如:http://myserver:8888

我的问题是是否可以配置nginx以便我可以将 NON -http请求(只是那些普通TCP连接)转发到其他端口?测试它是否是一个http请求非常容易,因为第一个字节将是“GET”或“POST”。这是一个例子。

客户端连接到nginx。 客户发送:

一个。 HTTP get请求:“GET / HTTP 1.1”:HTTP的一些规则

湾任何无法识别为HTTP标头的字节:将其转发到其他端口,例如888,999等。

技术上可行吗?或者你会建议一种方法来做到这一点?

3 个答案:

答案 0 :(得分:41)

从nginx 1.9.0开始可能是

http://nginx.org/en/docs/stream/ngx_stream_core_module.html

沿着这些方向的东西(这位于nginx.conf的顶层):

stream {
    upstream backend {
        server backend1.example.com:12345;
    }

    server {
        listen 12345;
        proxy_pass backend;
    }
}

答案 1 :(得分:4)

这在技术上是可行的。

您可以修改开源的tcp代理,例如名为nginx_tcp_proxy_moduleHAproxy的nginx模块。

或者您可以编写类似于上面的nginx模块来为您执行此操作。

答案 2 :(得分:0)

如果使用HTTP进行nginx远程代理,您的客户端可以使用HTTP CONNECT命令,然后它与远程端口连接并将所有数据转发为“原始”(或者至少我认为是这样)。