web-dev-qa-db-ja.com

要求された場所のフォワードプロキシとしてNGINXを使用する方法は?

フォワードプロキシとして使用しているFiddlerを置き換えるために、NGINXをフォワードプロキシとして構成しようとしています。使用するFiddlerの機能により、すべての着信要求を8888ポートにプロキシできます。 NGINXでこれを行うにはどうすればよいですか?

リバースプロキシとしてのNGINXのすべての例で、proxy_passは常に特定のアップストリーム/プロキシサーバーに定義されます。 Fiddlerをフォワードプロキシとして使用しているのと同じように、サーバーに関係なく、要求されたサーバーに送信されるように構成するにはどうすればよいですか。

例:

私のコードでは:

WebProxy proxyObject = new WebProxy("http://mynginxproxyserver:8888/",true);
WebRequest req = WebRequest.Create("http://www.contoso.com");
req.Proxy = proxyObject;

Mynginxproxyserver/nginx.confで、プロキシを別のサーバーに委任したくありません(例:proxy_passをhttp://someotherproxyserver)。代わりに、単にプロキシサーバーになり、クライアント(上記を参照)からのリクエストをリクエストホストにリダイレクトします。それは、Fiddlerをプロキシとして有効にしたときに行うことです。 http://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/UseFiddlerAsReverseProxy

9
Arman Bimatov

コードはリバースプロキシではなく、フォワードプロキシ(多くの場合「単なる」プロキシ)を使用しているように見え、動作がまったく異なります。リバースプロキシはサーバーエンド用であり、クライアントが実際に見たり考えたりしないものです。バックエンドサーバーからコンテンツを取得し、クライアントに渡すことです。フォワードプロキシは、クライアントがインターネットの残りの部分に接続するために設定するものです。また、サーバーは潜在的にフォワードプロキシについて何も知らない可能性があります。

fwd vs rev proxy

Nginxは元々、フォワードプロキシではなくリバースプロキシとして設計されています。しかし、それはまだ前方のものとして使用することができます。それがおそらくあなたがそれのための多くの構成を見つけることができなかった理由です。

私はこれを自分でやったことがないので、これは理論的な答えですが、次のような構成が機能するはずです。

server {
    listen       8888;

    location / {
        resolver 8.8.8.8; # may or may not be necessary.
        proxy_pass http://$http_Host$uri$is_args$args;
    }
}

これは重要な部分であり、残りを設定する必要があります。

この考え方は、proxy_passが事前定義されたホストではなく変数Hostに渡すというものです。したがって、http://example.com/foo?barをリクエストすると、httpヘッダーにはexample.comのホストが含まれます。これにより、proxy_passはhttp://example.com/foo?barからデータを取得します。

リンクしたドキュメントは、リバースプロキシとして使用しています。それは同等だろう

        proxy_pass http://localhost:80;
25
Grumpy