web-dev-qa-db-ja.com

UDP NGINXリバースプロキシを設定するにはどうすればよいですか?

NGINXのUDP/TCPリバースプロキシに関するドキュメントを読みましたが、少し混乱しています。 NGINXは、プロキシサーバーとプロキシが転送するサーバーの両方に存在する必要がありますか?

私の構成は、153.0.0.0にプロキシをローテーションしたい2つのIP(5.0.0.0、6.0.0.0)を持つ私のnginx udpプロキシサーバーです。ポートは2555になります。

設定に関して混乱しています。

サーバーが待機するIPアドレスやポートを定義するlistenディレクティブ。

これは、プロキシするサーバーのIP(153.0.0.0)、または内部IPを意味しますか?

Proxy_passディレクティブを含めて、プロキシサーバーまたはサーバーがトラフィックを転送するアップストリームグループを定義します。

どういう意味かわかりません

Proxy_bindディレクティブと必要なネットワークインターフェイスのIPアドレスを指定します。

これは内部IPですか、それともバインドする外部IPですか? (5.0.0.0)

おそらく、単純な構成が説明に役立つでしょう。いくつかの例を見つけましたが、ローカル、外部、プロキシサーバー、またはIPをプロキシしているサーバーがどれか不明なため、役に立ちません。

4
Rhys

NGINXは、プロキシサーバーとプロキシの転送先のサーバーの両方に存在する必要がありますか?

これは通常必要ありません。

[listenディレクティブについて混乱しています。]

listen ディレクティブは、前述のように、「サーバーが待機するIPアドレスまたはポート、あるいはその両方」を定義します。 「リスニング」とは、着信接続の監視を指します。 「サーバー」はNginxをホストしているコンピューターです。そのため、プロキシ接続を受信するコンピューターのIPやポート(またはそのコンピューターが通過するポート)を指します。

例ポート8080でIP 127.0.0.1をリッスンします

listen 127.0.0.1:8080;

例ポート53(DNS)ですべてのudpトラフィックをリッスンします

listen 53 udp;

これが何を意味するのかわかりません:プロキシされたサーバーまたはサーバーがトラフィックを転送するアップストリームグループを定義するためのproxy_passディレクティブを含めます

proxy_pass ディレクティブは、Nginxプロキシーがデータを「渡す」コンピューター(特定の要求に実際に応答するサーバー)を定義します。これは、URL、IPアドレス、またはグループ名にすることができます。

例URL(プロキシデータがexample.comに渡されてリクエストが完了します)

proxy_pass http://example.com;

例IP(プロキシデータはIP 127.0.0.1に渡されてリクエストが完了します)

proxy_pass http://127.0.0.1;

例グループ(プロキシデータは、要求を完了するために定義されたグループのメンバーに渡されます)

upstream dns_servers {
    server 192.168.136.130:53;
    server 192.168.136.131:53;
}

#... 

proxy_pass dns_servers;

上記のグループには、代わりにURLを含めることができます。 backend1.example.com:53;

proxy_bindディレクティブと必要なネットワークインターフェイスのIPアドレスを指定します-これは、バインドする内部IPか外部IPですか?

proxy_bind ディレクティブは、「プロキシサーバーへの発信接続を、指定されたローカルIPアドレスからオプションのポート」。そのため、ほとんどの場合、ローカルになります(ただし、リンクで詳しく説明されているように、リモートIPへのバインドは可能です)。このオプションは、複数のネットワークインターフェイスがある場合、または接続が正しく機能するために特定のIPを必要とするため、特定の送信元IPアドレスを選択する必要がある場合にのみ、非常に役立ちます。

おそらく、単純な構成が[もの]を説明するのに役立ちます。

これは状況に適している場合とそうでない場合がありますが、非常に単純なtcp/httpの例は次のようになります。

server {

         listen 2555;
         #... 

         location /app1/ {
               proxy_bind 5.0.0.0;
               proxy_pass http://153.0.0.0:2555;
          }

          location /app2/ {
                proxy_bind 6.0.0.0;
                proxy_pass http://153.0.0.0:2555;
          }

         #... 
} 

UDPプロキシの簡単な例として

stream {
    server {
        listen 2555 udp;
        proxy_pass receiving_servers;
        proxy_responses: 0;
        proxy_bind 5.0.0.0;
        #... 
    }

    upstream receiving_servers {
        server 153.0.0.0:2555;
    }

    #... 
}

私の構成は、153.0.0.0にプロキシをローテーションしたい2つのIP(5.0.0.0、6.0.0.0)を持つ私のnginx udpプロキシサーバーです。

私が間違っていない場合、本当にIPをローテーションしたい場合は、プロキシの前にロードバランサ(おそらくNginxを備えた別のサーバー)が必要になる可能性があります(これが純粋に内部で実行できるかどうかはわかりません)。

5
Anaksunaman