English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
本文
序論
Nginxのプロキシ機能と負荷バランス機能は最もよく使用されます。nginxの基本的な文法や設定については、前の記事で説明しました。この記事では、まずプロキシ機能の設定について説明し、次に詳細な負荷バランスについて説明します。
1Nginxプロキシサービスの設定説明404、前回のHTTPモジュールの設定では以下の設定がありました。代理がステータスコード404ページを百度にリダイレクトします。
error_page 404 https://www.baidu.com; #エラーページ
しかし、この設定は、注意深いユーザーならその効果がないことに気づくでしょう。
この機能を有効にするためには、以下の設定と組み合わせて使用する必要があります。
proxy_intercept_errors on; #プロキシサーバーが返信するステータスコードが400またはそれ以上400、設定されたerror_pageの設定が有効になります。デフォルトはoff。
2、私たちのプロキシがget、postリクエストメソッドのいずれかを許可する場合
proxy_method get; #クライアントのリクエストメソッドをサポート。post/get;
3、サポートするHTTPプロトコルのバージョンを設定します。
proxy_http_version 1.0 ; #Nginx服务器提供代理服务的httpプロトコルバージョン1.0,1.1、デフォルト設定为1バージョン
4如果你的nginxサーバーが2台のwebサーバーがプロキシとして使用され、負荷バランスアルゴリズムがループリングを使用している場合、あなたの一台のマシンのwebプログラムiisが閉じられており、つまりwebにアクセスできない場合、nginxサーバーがリクエストを配信する際に、アクセスできないこのwebサーバーにリクエストを配信します。ここでの応答接続時間が長いと、クライアントのページが常に応答を待っている状態になり、ユーザーにとっての体験は非常に悪くなります。ここではどうすればこのような状況を避けることができますか。この問題を説明するために図を配置します。
負荷バランスの中で、あるweb2このような状況が発生した場合、nginxはまずwebにアクセスします。1リクエストはwebに送信されますが、nginxが不適切に設定されている場合、リクエストはwebに続けて配信されます。2その後、webを待ちます。2応答が来ない場合、私たちの応答時間がタイムアウトに達するまで、リクエストはwebに再配信されます。1ここでの応答時間が長いと、ユーザーが待つ時間も長くなります。
以下の設定はその一つの解決策です。
proxy_connect_timeout 1; #nginx服务器与被代理的服务器建立连接的超时时间、デフォルト60秒 proxy_read_timeout 1; #nginx服务器想被代理服务器组发出readリクエスト後、応答を待つ超時時間、デフォルト为60秒。 proxy_send_timeout 1; #nginx服务器想被代理服务器组发出writeリクエスト後、応答を待つ超時時間、デフォルト为60秒。 proxy_ignore_client_abort on; #客户端断网时,nginx服务器是否终止对被代理服务器的请求。默认为off。
5、upstream指令でサーバーグループを設定し、そのサーバー内のアクセスアルゴリズムが設定された負荷バランスルールに従います。また、この指令を使用して、どの異常状況が発生した場合に次のサーバーグループを順次処理するかを設定できます。
proxy_next_upstream timeout; #upstream指令で設定されたサーバーグループに障害が発生した場合、プロキシサーバーが返すステータス値。error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off
6、httpを通じてクライアントの実際のIPアドレスを取得し、プロキシサーバーのIPアドレスを取得するのではなく、以下の設定を行う必要があります。
proxy_set_header Host $host; #ユーザーがブラウザでアクセスするドメインがVIPにバインドされている場合、VIPの下にRSがある場合、$hostを使用します。ドメインとポートはURLのアクセスURLに含まれます。www.taobao.com:80 proxy_set_header X-Real-IP $remote_addr; #ソースIP【$remote_addr、HTTP接続ヘッダ情報の内訳】をXに割り当てます。-Real-IP; これにより、コードで $X-Real-IPからソースIPを取得します。 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#nginxがプロキシサーバーとして設定されている場合、通過するマシンのIPアドレスとプロキシマシンのIPアドレスが記録されます。コードでは echo $x-forwarded-for |awk -F, '{print $1}' としてソースIP
Xについて-Forwarded-ForとX-Real-IPに関連する記事を以下のブログ友達に推薦します:HTTPリクエストヘッダのX-Forwarded-For ,このブログ友達はhttpプロトコルに関する一連の記事を説明しています。皆さんにご注意ください。
7以下は、代理設定に関する設定ファイルの一部です。参考としてください。
include mime.types; #ファイル拡張子とファイルタイプのマッピングテーブル default_type application/octet-stream; #默认文件类型、默认为text/plain #access_log off; #取消服务日志 log_format myFormat ' $remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式 access_log log/access.log myFormat; #combined为日志格式的默认值 sendfile on; #允许sendfile方式传输文件、デフォルト为off、可以在httpブロック、serverブロック、locationブロック。 sendfile_max_chunk 100k; #每个进程每次调用传输数量不能大于设定的值、デフォルト为0、即不设上限。 keepalive_timeout 65; #连接超时时间、デフォルト为75秒、http、server、locationブロックで設定可能。 proxy_connect_timeout 1; #nginx服务器与被代理的服务器建立连接的超时时间、デフォルト60秒 proxy_read_timeout 1; #nginx服务器想被代理服务器组发出readリクエスト後、応答を待つ超時時間、デフォルト为60秒。 proxy_send_timeout 1; #nginx服务器想被代理服务器组发出writeリクエスト後、応答を待つ超時時間、デフォルト为60秒。 proxy_http_version 1.0 ; #Nginx服务器提供代理服务的httpプロトコルバージョン1.0,1.1、デフォルト設定为1.0バージョン。 #proxy_method get; #支持客户端的請求方法。post/get; proxy_ignore_client_abort on; #客户端断网时,nginx服务器是否终止对被代理服务器的请求。默认为off。 proxy_ignore_headers "Expires" "Set-Cookie"; #Nginx服务器不处理设置的http响应头域,这里空格隔开可以设置多个。 proxy_intercept_errors on; #如果被代理服务器返回的状态码为400またはそれ以上400、設定されたerror_pageの設定が有効になります。デフォルトはoff。 proxy_headers_hash_max_size 1024; #HTTPヘッダーを保存するハッシュテーブルの容量上限。デフォルトは512文字 proxy_headers_hash_bucket_size 128; #nginxサーバーがHTTPヘッダーを保存するハッシュテーブルの容量。デフォルトは64文字 proxy_next_upstream timeout; #リバックエンドアップストリームで設定されたサーバーグループが障害を起こした場合、代理されるサーバーが返すステータスコード。error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off #proxy_ssl_session_reuse on; デフォルトはon、エラーログで「SSL3_GET_FINSHED:digest check failed”の状況で、このコマンドをoffに設定することができます。
Nginx負荷分散詳細
前の記事でnginxにどのような負荷分散アルゴリズムがあるか説明しました。この節では、設定された負荷分散アルゴリズムについて詳細に説明します。
まず、upstreamの設定について説明します。この設定は、代理されるサーバーのアドレスのグループを書き、負荷分散のアルゴリズムを設定します。ここでは、代理されるサーバーのアドレスは以下の通りです2の書き方
upstream mysvr { server 192.168.10.121:3333; server 192.168.10.122:3333; } server { .... location ~*^.+$ { proxy_pass http://mysvr; #リクエストをmysvrが定義するサーバーリストにリダイレクト }
upstream mysvr { server http://192.168.10.121:3333; server http://192.168.10.122:3333; } server { .... location ~*^.+$ { proxy_pass mysvr; #リクエストをmysvrが定義するサーバーリストにリダイレクト }
それでは、実際のものを少し紹介します。
1、ホットスワップ:もし2台のサーバーがあり、一つのサーバーが障害を起こした場合に、二つ目のサーバーを起動してサービスを提供します。サーバーがリクエストを処理する順序:AAAAAA突然Aが落ちた、BBBBBBBBBBBBBB.....
upstream mysvr { server 127.0.0.1:7878; server 192.168.10.121:3333 backup; #ホットスワップ }
2、ロウト:nginxはデフォルトでロウトを行い、ウェイトはデフォルトで1、サーバーがリクエストを処理する順序:ABABABABAB....
upstream mysvr { server 127.0.0.1:7878; server 192.168.10.121:3333; }
3、ウェイトドローテーション:設定されたウェイトの大きさに応じて、異なるサーバーに異なる数のリクエストを配信します。設定しない場合は、デフォルトで1。以下はサーバーのリクエスト順序です:ABBABBABBABBABB....
upstream mysvr { server 127.0.0.1:7878 weight=1; server 192.168.10.121:3333 weight=2; }
4、ip_hash:nginxは同じクライアントIPのリクエストを同じサーバーにリダイレクトします。
upstream mysvr { server 127.0.0.1:7878; server 192.168.10.121:3333; ip_hash; }
5、もしあなたが上記4この均等化アルゴリズムがよく理解できない場合は、私の前の記事で提供した画像を見てみてください。もっと簡単に理解できるかもしれません。
ここまで来たら、nginxの負荷均等化設定が非常に簡単で強力に感じるかもしれませんが、まだ終わりではありません。ここで少し話を変えてみましょう。
nginxの負荷均等化設定のいくつかの状態パラメータについて説明します。
upstream mysvr { server 127.0.0.1:7878 weight=2 max_fails=2 fail_timeout=2; server 192.168.10.121:3333 weight=1 max_fails=2 fail_timeout=1; }
ここまで来たら、nginxの内蔵の負荷均等化アルゴリズムはもう在庫切れかもしれません。nginxの負荷均等化アルゴリズムについてもっと深く理解したい場合は、nginx公式が提供するプラグインを確認してください。
これで本文のすべてが終わりました。皆様の学習に役立つことを願っています。また、ナイアラチュートリアルのサポートをどうぞ。
声明:この記事の内容はインターネットから収集され、著作権者に帰属します。インターネットユーザーが自発的に貢献し、アップロードした内容です。このサイトは所有権を持ちません。また、人工編集は行われていません。著作権侵害が見つかった場合は、notice#wまでメールを送ってください。3codebox.com(メールを送信する際に、#を@に置き換えてください。報告を行い、関連する証拠を提供してください。一旦確認が取れたら、このサイトは即座に侵害する可能性のある内容を削除します。)