NGINX для перенаправления HTTP и не-HTTP необработанных сокетов через TCP - PullRequest
0 голосов
/ 25 января 2019

Мне нужно перенаправить HTTP-запрос, начиная с / RPC2, на порт A и подключение через raw-сокет через TCP к порту B. Как я могу добиться этого с NGINX?

По сути, рабочий процесс выглядит следующим образом:

  1. NGINX прослушивает порт C
  2. Если путь начинается с / RPC2, перенаправьте запрос на порт A
  3. Если путь начинается с / import_image, перенаправьте запрос на порт B.

Однако запрос, связанный с / import_image, является Python raw-socket через TCP.Код выглядит так:

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 одновременно?Спасибо.

...