web-dev-qa-db-ja.com

非http接続要求をnginxの他のポートに転送することは可能ですか?

サーバーでnginxを実行し、ポート80と433をリッスンしています。nginxにはポート転送の方法がいくつかあり、次のようにリクエストを転送できます: http:// myserver:80/subdir1 次のようなアドレスに: http:// myserver:8888

私の質問は、[〜#〜] non [〜#〜]-httpリクエストを転送できるようにnginxを構成することは可能です(それらだけplain TCP connection)他のポートへ?最初のバイトがhttpリクエストであるかどうかをテストするのは非常に簡単です「GET」または「POST」のいずれかです。これが例です。

Nginxに接続しているクライアント。クライアントは以下を送信します:

a。 HTTP getリクエスト: "GET/HTTP 1.1":HTTPのルール

b。 HTTPヘッダーとして認識できないバイト:他のポート、たとえば888、999などに転送します。

技術的に可能ですか?それとも、これを行う方法を提案しますか?

19
tactoth

これは確かに技術的に可能です。

nginx_tcp_proxy_module または HAproxy と呼ばれるnginxモジュールのようなオープンソースのtcpプロキシを変更できます。

または、上記のようなnginxモジュールを作成して、これを行うこともできます。

4
Zimbabao

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;
    }
}
48
Slava V

hTTPを使用したnginxリモートプロキシの場合、クライアントはHTTP CONNECTコマンドを使用できます。その後、クライアントはリモートポートに接続し、すべてのデータを「生」として転送します(または少なくともそう思います)。

0
rogerdpack