Мне нужно перенаправить HTTP-запрос, начиная с / RPC2, на порт A и подключение через raw-сокет через TCP к порту B. Как я могу добиться этого с NGINX?
По сути, рабочий процесс выглядит следующим образом:
- NGINX прослушивает порт C
- Если путь начинается с / RPC2, перенаправьте запрос на порт A
- Если путь начинается с / 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 одновременно?Спасибо.