***

3534 ワード

***
エージェントとは?エージェントは、通常、複数のサーバ間で負荷を割り当てたり、異なるWebサイトからのコンテンツをシームレスに表示したり、HTTP以外のプロトコルでアプリケーションサーバに要求処理を渡したりするために使用されます.
プロキシリクエスト
Nginxエージェントが要求すると、指定したエージェントサーバに要求が送信され、応答が得られ、クライアントに送信されます.HTTPサーバ(別のNginxサーバまたは他のサーバ)へのリクエストのプロキシ、または非HTTPサーバへの特定のプロトコルの使用( またはPHPなどの特定のフレームワークで開発されたアプリケーションを実行できます)、サポートされるプロトコルにはPythonFastCGIuwsgiSCGIおよびmemcachedが含まれます.
HTTPプロキシサーバにリクエストを渡す場合は、Locationモジュールでproxy_passコマンドを指定する必要があります.たとえば、次のようにします.
location /some/path/ {
    proxy_pass http://www.example.com;
}

#       
# curl 127.0.0.1:80/some/path/
#         www.example.com       

転送アドレスはドメイン名またはIPアドレスとして指定できます.IPアドレスを使用する場合は、ポートを指定する必要があります.
location ~ \.php {
    proxy_pass http://127.0.0.1:8080;
}

HTTP以外のプロキシサーバにリクエストを渡す場合は、次のコマンドを適切に選択して使用します.
  • fastcgi_passFastCGIサーバにリクエストを渡す
  • uwsgi_pass要求をuwsgi_に渡すpassサーバ;
  • scgi_pass要求をSCGIサーバに渡す.
  • memcached_pass要求をmemcachedサーバに渡す.
  • location ~ \.php$ {
        root           /usr/share/nginx/html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    転送先アドレスの後ろに/が付いているかどうかは、転送されたURLが異なることに注意してください.
    location ^~ /static/ { 
        proxy_pass http://www.test.com; #          "/",           
    }
    #       
    # curl http://localhost/static/index.html
    #     http://www.test.com/static/index.html
    location ^~ /static/ { 
        proxy_pass http://www.test.com/; #          "/",            
    }
    #       
    # curl http://localhost/static/index.html
    #     http://www.test.com/index.html

    リクエストヘッダの転送
    デフォルトでは、Nginxはリクエストヘッダを再定義します:Host$proxy_host変数の値に設定します.Connectioncloseに設定されている.他の空の文字列のヘッダフィールドが削除されます.proxy_set_header命令により、要求ヘッダフィールドの値を変更することができる.この命令は、locationまたはserverなどのhttpブロック以上のブロックで指定することができる.リクエストヘッダを渡すアプリケーションを見てみましょう.
    location /some/path/ {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for; #    Web       X-Forwarded-For      IP
        proxy_set_header Accept-Encoding "";  
        proxy_pass http://localhost:8000;
    }

    バッファの設定
    デフォルトでは、Nginxはプロキシ・サーバからの応答をバッファします.応答は内部バッファに格納され、応答全体が受信されるまでクライアントに送信されません.バッファリングは、応答がNginxからクライアントに同期して渡される場合、プロキシサーバの時間を無駄にする可能性があるため、低速クライアントのパフォーマンスを最適化するのに役立ちます.バッファを有効にすると、Nginxはプロキシ・サーバが応答を迅速に処理できますが、Nginxはクライアントがダウンロードする必要がある場合、応答内容をできるだけ多くキャッシュします.
    バッファ使用proxy_bufferingコマンドを有効にするかどうかは、デフォルトではオンです.proxy_buffers命令は、要求に割り当てられたバッファのサイズと数を制御し、プロキシ・サーバからの応答の第1の部分は、proxy_buffer_size命令によって設定された個別のバッファに格納される.
    location /some/path/ {
        proxy_buffers 16 4k;
        proxy_buffer_size 2k;
        proxy_pass http://localhost:8000;
    }

    バッファが無効になっている場合は、プロキシサーバから応答を受信しながらクライアントに応答を同期して送信します.この動作は、応答の受信を迅速に開始する必要がある高速インタラクティブクライアントにとって必要かもしれません.
    location /some/path/ {
        proxy_buffering off;
        proxy_pass http://localhost:8000;
    }

    参考記事:
  • NGINX Reverse Proxy
  • proxy_passの小説明
  • Module ngx_http_proxy_module