1.1 nginxの基本的な導入
1. nginxのは何ですか
-
-
当局は、(このレベルに到達するために持っているあなたは、静的なリソースを扱うことができるとき)nginxのは10万同時を扱うことができると言います
2. nginxの高い並行性の原則(マルチプロセス+高並列性を実現するのepoll)
-
nginxのは、開始後、マスター・プロセスと複数の独立したワーカープロセスが存在します。
-
それぞれの子プロセスは一つだけのスレッド(コルーチン)、IO多重化のepollモデルは、高い並列性を達成するために使用されます。
3.のepoll原理は、高い並列性を達成するために
-
-
各デバイスドライバは、上記数sockfdのファイルディスクリプタのカーネルの実装は、確立されたコールバック関数に従って達成されます。
-
イベントが数sockfdに発生すると、それに対応するコールバック関数が呼び出されると、他には「アイドル」状態になっていないだろう、このリストに参加する数sockfd。
-
epollファイルリストを取得するために、上述の、ここではメモリマッピング(MMAP)技術を使用して、ファイルの多数のコピーを避けるには、オーバーヘッドを記述子
メモリマッピング(MMAP) :メモリマップされたファイルは、ファイルがメモリにマップされ、ファイルが実行する必要はありませんI / O操作を
1.2 nginxのプロキシフォワード&リバースプロキシ
1.フォワードプロキシ
-
-
最初のプロキシサーバーに接続されている私は、私はそれを取り戻すために、プロキシサーバーを、サイトのコンテンツにアクセスして、私に戻ることができない必要がある彼に伝えます
-
クライアントは、フォワードプロキシサーバを設定する必要があり、もちろん、前提は、フォワードプロキシサーバーのIPアドレスと、ポートエージェントを知ることです。
-
CCproxyなどの前に、このようなソフトウェアを使用することにより、例えば、http://www.ccproxy.com/は、ブラウザでプロキシアドレスを設定する必要があります。
フォワードプロキシ役割:
-
-
-
2)リソースへのアクセスを加速するために、キャッシングを行うことができます
-
3)クライアントへのアクセスの許可、インターネット認証
-
4)プロキシは、非表示情報へのユーザアクセス記録(アクセス管理)、外部ユーザーを記録することができ
-
2.リバースプロキシ
-
-
2.実際の動作モードは、インターネット上の接続要求を受け入れ、[転送し、内部ネットワーク上のサーバに要求するためにプロキシサーバーを指します。
-
3.および外部プロキシサーバはサーバのパフォーマンスであるとき、インターネットへの接続を要求しているクライアントにサーバーから取得した結果を返します。
1.3 nginxの一般的な構成
1. nginxの設定ファイルの解析
#実行していないユーザー のユーザーに誰を; #プロセスを開始し、通常はCPUの数が等しくなるように設定 1をworker_processes ; #グローバルエラーログファイルとPID #error_logにログ/ error.logに; #error_logのログ/ error.logに注意してください; #error_logのログ/エラー情報の.log; #PIDログ/ nginx.pid; #1 動作モード及び接続の数限界 イベント{ #ファイルディスクリプタは、IOを多重化する方法では、(I / Oが多重)であり、 #のみカーネルのためのよりlinux2.6 、大幅nginxの性能向上させることができ 、使用のファイルディスクリプタを、 #同時リンクの単一のバックグラウンド・プロセス・ワーカープロセスの最大数 worker_connections 1024 ; #製品の合計数によって複雑にworker_processesとworker_connections #worker_processes = * worker_connections max_clientsこと #下に設定リバースプロキシの場合、max_clients = worker_processes * worker_connections / 4なぜ #理由を4で除算するリバースプロキシ上、それは指摘しておかなければ経験的な値である #通常の状況下で、上記の条件に基づいてnginxのサーバーが処理できる接続の最大数は以下のとおりです。4 * 8000 = 32000 #1 程度の物理メモリサイズworker_connections値とセット #IOによって同時実行が値max_clientsをバインドするのであまり開くことができるファイルシステムの最大数よりでなければなりません #を、システムを開くことができます約100,000サイズのファイルやメモリ比例の最大数は、開くことができ、一般的な1GBのメモリ・マシン上のファイルの数がある #:我々は360MメモリVPSは、番号を開くことができるファイルハンドルの数を見て #1 $のCATの/ proc / SYS / FS /ファイル-MAX #の出力34336 #32000 <34336、すなわち、同時接続数の合計その少ないファイルハンドルシステムの総数は、オペレーティングシステム内の範囲に耐えることができるように、開くことができるより 位したがって、数に応じてworker_connectionsニーズの値は、プロセスをworker_processes総最大ファイルシステムが開くように適合させることができます ローカル設定の #だから、オペレーティングシステムが開いているファイルの同時最大数の合計数よりも少なくすることができることを #とその本質は、物理ホストCPUとのメモリに応じて設定されている #の他の作業プロセスのホストがあるので、もちろん、理論的および同時の実際の総数は、バイアスすることができます私たちは、システムリソースを消費する必要があります。 #ulimitの-shn 65535 } HTTP { 位mime.typeによって定義されたMIMEタイプ、ファイルタイプをセット ;のmime.typesを含む default_typeファイルアプリケーション -解釈されない/ OCTET 、ストリーム #セットログフォーマット LOG_FORMATメイン ' $ REMOTE_ADDR - $ REMOTE_USER [$ time_local]を"$リクエスト" ' ' $ $ body_bytes_sentステータス"$ HTTP_REFERER" ' ' "$ HTTP_USER_AGENT" "$ HTTP_X_FORWARDED_FOR" " ; access_logのログ / access.logをメイン; nginxのsendfileのディレクティブを指定した出力ファイルにsendfileの機能(ゼロコピーモード)を呼び出すかどうか #一般的なアプリケーションのために、ONに設定する必要があり、 #、ディスクIO重い負荷アプリケーションなどのダウンロードアプリケーションに使用された場合、それがOFFに設定することができ、 #バランスディスクへネットワークI / O速度を処理し、システムの稼働時間を減らす。 sendfileのON、 #1 、ON TCP_NOPUSH #タイムアウトインターバル #keepalive_timeout 0; keepalive_timeout 65 ; TCP_NODELAY ON; #オープンGZIP圧縮 GZIP ON; gzip_disable 「MSIE [1-6]。" ; #設定要求バッファ client_header_buffer_size 128K; large_client_header_buffers 。4 128K; #1 セットの仮想ホストの構成 {サーバー #のポート80上のリスニングは、 80を聞く; #のwww.nginx.cnアクセス使用される定義 サーバー名www.nginx.cn; #のデフォルトのWebルートディレクトリの場所定義されたサーバーの ルートHTML; #このバーチャルホストを設定するには、ログにアクセス access_logのログを/ メインnginx.access.log; #デフォルト要求 LOCATION / { #はホームインデックスファイルの名前定義 インデックスをindex.phpをindex.htmlにあるindex.htm; } #はエラーページ定義 error_page 500 502 503 504 / 50x.htmlと、 LOCATION = / {50x.html } #の静的ファイルを、自分自身でnginxの契約 〜^ LOCATION /(ロイヤリティーフリー| JavaScriptの| JS | CSS |フラッシュ|メディア|静的)/ { #は、大きく設定することができ期限切れ、30日、以下の静的ファイルの更新を期限切れ #頻繁に更新すれば、あなたは小さく設定することができます。 30dは有効期限; } #、PHPスクリプトの要求は、デフォルトの設定を使用して、すべてのFastCGI FastCGIプロセスに転送されます。.. LOCATION〜の.php $ { fastcgi_pass 127.0.0.1:9000を、 fastcgi_indexのindex.php; fastcgi_param SCRIPT_FILENAME $ $ DOCUMENT_ROOT fastcgi_script_name; fastcgi_paramsが含まれる; } #の禁止ファイルアクセス.htxxx LOCATION〜/ .htから{ 拒否すべて; } } } nginxの設定ファイルのコメント
1.4 nginxのロードバランシングの設定
1. (nginxのドッキングウィンドウの展開に二つの容器を使用して)ビルド実験環境
1 )最初のサービスを構築するためにnginxの使用して 、[ルート@ Linuxの -node4〜] #ドッカーコンテナRUN --name WEB01 -d -p 81:80 nginxのの テストアクセス:HTTP://192.168.56.14:81 / ルート@ c58a7f1fb89d: / #ドッカーExecの-it WEB01 bashの c58a7f1fb89d @ルート:/ #エコーWEB01> /usr/share/nginx/html/index.html
2 )使用のドッキングウィンドウが二nginxのサービスを構築するために 、[ルート@ Linuxの -node4〜] #コンテナRUN --name WEB02 -d -p 82:80 nginxのドッキングウィンドウ テストアクセス:HTTP://192.168.56.14:82 / ルート@ a3440d30f27c : / # ドッカーExecの-it WEB02 bashの a3440d30f27c @ルート:/ # エコーWEB02> /usr/share/nginx/html/index.html
2. 回転のデフォルト(nginxのは、実際のホストとのconfigure負荷分散にインストール)
回転:バックエンドサーバがあれば、各要求は、個別に、異なる時間順バックエンドサーバーに割り当てられたダウンオフ自動的に削除します。
[ノード4ルートのLinux @〜] #yumをインストールnginxの-Y [ノード4ルート-Linuxの@〜] #Vimの/etc/nginx/nginx.conf ####回転でデフォルトnginx.confを修正するために####あります '' ' #1の上流を書き込むために、サーバーの外部に配置される必要があり 、上流myservers { サーバー192.168.56.14:81、 サーバ192.168.56.14:82; } #サーバ2は、実際には、構成のみの位置を変更する必要がデフォルト、ありました、転送エージェントは、指定することができます サーバー{ LOCATION / { proxy_pass HTTP:// myserversを; } } '' ' [Linuxの@ルート -node4 nginxの] #のsystemctlスタートnginxの
3. 一般的な構成コムロードバランシング
図1に示すように、ポーリング(デフォルト) バックエンドサーバがダウンしている場合、個別に異なる時間順バックエンドサーバーに割り当てられた各要求は、自動的に削除することができます。{backserver上流 サーバー 192.168.0.14、 サーバー192.168.0.15; } 2 、重量重量 ポーリングケースムラバックエンドサーバのパフォーマンスのための重量比は、アクセスに比例した確率。{backserver上流 サーバー 192.168.0.14重量= 3; SERVER = 192.168.0.15重量7; } 。3 、ip_hashは(IPバインディング) ユーザがサーバにログインしている場合、上述した実施の形態での問題は、負荷分散システムでは、と言うことであるましたユーザが第2の時間を要求したとき、我々は、負荷分散システムであるため、その後、 すべての要求は、サーバが、一人のユーザーを記録し、その後、別のサーバーに移転した、クラスタ内のサーバの1つに再配置されます、そのログイン情報は、これは明らかに不適切である、失われます。 我々は、顧客が、サーバーを訪問したユーザーが再びアクセスしたときに、要求が自動的にサーバを見つけるために、ハッシュアルゴリズムを介して行われている場合、この問題を解決するためにip_hash命令を使用することができます。 各要求は訪問によるIPハッシュ結果が割り当てられているので、各訪問者は、固定のバックエンドサーバーにアクセスすることを、セッションの問題を解決することができます。 上流backserver { ip_hash; サーバー 192.168.0.14:88、 サーバ192.168.0.15:80; } 。4 、フェア(サードパーティのプラグ) バックエンドサーバ、短い応答時間優先割り当てに割り当て要求の応答時間に応じ。{backserver上流 サーバーSERVER1、 サーバーのサーバー2; フェア; } 。5 、url_hash(サードパーティのプラグイン) URLにハッシュアクセスURL割り当て要求の結果に応じてそれぞれが同じバックエンドサーバに向けられたときに、キャッシュバックエンドサーバーが有効です。{backserver上流 サーバーsquid1: 3128; サーバーsquid2:3128; ハッシュ$ REQUEST_URI; hash_method CRC32; }