NGINX通过TCP

时间:2019-01-25 19:15:45

标签: http nginx reverse-proxy raw-sockets

我需要将以/ RPC2开头的HTTP请求重定向到端口A,并将通过TCP的原始套接字连接重定向到端口B。如何使用NGINX做到这一点?

基本上,工作流程如下:

  1. NGINX监听端口C
  2. 如果路径以/ RPC2开头,请将请求重定向到端口A
  3. 如果路径以/ import_image开头,请将请求重定向到端口B。

但是,与/ import_image相关的请求是基于TCP的Python原始套接字。代码如下:

connection = socket.socket(socket.AF_INET, socket.SOCKET_STREAM)
connection.connect((host, port))
connection.sendall(some data)
response = HTTPResponse(connection)
response.begin()

我已经尝试过了:

http {

    server {
        listen C;

        server_name localhost;

        location /RPC2 {
            proxy_pass http://0.0.0.0:A;
        }

        location /import_image {
            proxy_pass http://0.0.0.0:B;
        }
    }

}

它与/ RPC2路径一起使用时效果很好,但与/ import_image路径卡住了。程序挂在response.HTTPResponse(connection)上,后端服务器再也没有收到请求。

这:

stream {
    server {
        listen 0.0.0.0:C;
        proxy_pass 0.0.0.0:B;
    }
}

使用TCP代理,我可以为端口B提供服务,但是无法为端口A提供服务。

有什么办法可以同时重定向http和非http原始套接字?谢谢。

0 个答案:

没有答案