nginx は、高い安定性、豊富な機能セット、サンプル構成ファイル、および低いシステム リソース消費量で知られる高性能 http およびリバース プロキシ サーバーです。
nginx の機能 静的ファイル、インデックス ファイル、自動インデックス作成を処理し、ファイル記述子のバッファリングを開きます。キャッシュレス リバース プロキシ アクセラレーション、シンプルなロード バランシング、およびフォールト トレランス。 fastcgi、シンプルなロードバランシング、フォールトトレランス。モジュール構造。 gzip 圧縮、バイト範囲、チャンク応答、ssi フィルターやその他のフィルターが含まれます。 1 つのページ内に複数の ssi が存在し、fastcgi または別のプロキシ サーバーによって処理される場合、この処理はお互いを待つことなく並行して実行できます。 sslとtlssniをサポートします。主なアプリケーションシナリオ 1. 静的 http サーバー
まず、nginx はサーバー上の静的ファイル (html や画像など) を http プロトコルを通じてクライアントに表示できる http サーバーです。
構成:
server { listen 80; # 端口号 location / { root /usr/share/nginx/html; # 静态文件路径 } }
2. リバース プロキシ サーバー
リバース プロキシとは何ですか?
クライアントは http プロトコルを通じて Web サイトのアプリケーション サーバーに直接アクセスできます。Web サイト管理者が途中に nginx を追加すると、クライアントは nginx をリクエストし、nginx はアプリケーション サーバーにリクエストして、結果をクライアントに返します。 . このnginxはリバースプロキシサーバーです。
Configuration:
server { listen 80; location / { proxy_pass http://192.168.20.1:8080; # 应用服务器http地址 } }
http 経由でサーバーに直接アクセスできるのに、なぜ途中にリバース プロキシを追加する必要があるのでしょうか?不要ではないでしょうか? ?リバースプロキシは何をするのですか?さらに下に見ていきますと、以下の負荷分散や仮想ホストはすべてリバースプロキシをベースに実装されていますが、もちろんリバースプロキシの機能はこれに限定されるものではありません。
3. 負荷分散
Web サイトのトラフィックが非常に多い場合、Web マスターは喜んでお金を稼ぎますが、同時に問題にも直面します。 Web サイトの速度がどんどん遅くなっているため、1 つのサーバーではもはや十分ではありません。そのため、同じアプリケーションが複数のサーバーにデプロイされ、多数のユーザーからのリクエストが複数のマシンに分散されて処理されます。同時に、サーバーの 1 つがクラッシュしても、他のサーバーが正常に動作している限り、ユーザーの使用に影響を与えないという利点もあります。
当社の Web サイトが大幅にアップグレードされる場合、すべてのサーバーを直接シャットダウンしてからアップグレードすることは不可能です。通常、Web サイトをアップグレードするためにいくつかのサーバーをバッチでシャットダウンし、ユーザーからのリクエストがある場合は、実行中の他のマシンに割り当てて処理します。以前にオフになっていたマシンが更新された後、それらのマシンを再度オンにし、いくつかのマシンをまとめてオフにし、すべてのマシンが最終的に更新されるまで上記のサイクルを繰り返します。これはユーザーの使用には影響しません。
nginx は、リバース プロキシを通じて負荷分散を実現できます。
構成:
upstream myapp { server 192.168.20.1:8080; # 应用服务器1 server 192.168.20.2:8080; # 应用服务器2 } server { listen 80; location / { proxy_pass http://myapp; } }
4. 仮想ホスト
Web サイトには多数のアクセスがあり、負荷分散が必要です。ただし、すべての Web サイトが優れているわけではなく、アクセス数が少ないため、同じサーバー上に複数の Web サイトを配置してコストを節約する必要がある Web サイトもあります。
たとえば、2 つの Web サイト www.aaa.com と www.bbb.com が同じサーバーに展開されている場合、2 つのドメイン名は同じ IP アドレスに解決されますが、ユーザーは 2 つの Web サイトを介して 2 つの Web サイトを開くことができます。ドメイン名: まったく異なる Web サイトは、2 つのサーバーにアクセスするのと同じように、互いに影響を与えないため、2 つの仮想ホストと呼ばれます。
構成:
server { listen 80 default_server; server_name _; return 444; # 过滤其他域名的请求,返回444状态码 } server { listen 80; server_name www.aaa.com; # www.aaa.com域名 location / { proxy_pass http://localhost:8080; # 对应端口号8080 } } server { listen 80; server_name www.bbb.com; # www.bbb.com域名 location / { proxy_pass http://localhost:8081; # 对应端口号8081 } }
サーバー ポート 8080 および 8081 でアプリケーションをそれぞれ開きます。クライアントは、異なるドメイン名を介してアクセスし、server_name に従って、対応するアプリケーション サーバーにリバース プロキシできます。
仮想ホストの原理は、http リクエスト ヘッダーのホストが server_name と一致するかどうかによって実現されます。興味のある学生は、http プロトコルを学習できます。
さらに、server_name 構成では、悪意を持って特定のドメイン名をホスト サーバーにポイントするユーザーを除外することもできます。
5、fastcgi
nginx 自体は php などの言語をサポートしていませんが、処理のために特定の言語またはフレームワーク (php、python、perl など) にリクエストをスローできます。 fastcgi 経由。
server { listen 80; location ~ \.php$ { include fastcgi_params; fastcgi_param script_filename /php文件路径$fastcgi_script_name; # php文件路径 fastcgi_pass 127.0.0.1:9000; # php-fpm地址和端口号 # 另一种方式:fastcgi_pass unix:/var/run/php5-fpm.sock; } }
この設定では、.php で終わるリクエストは php-fpm に渡され、fashcgi を通じて処理されます。php-fpm は php の fastcgi マネージャーです。この記事では紹介しなかった、fashcgi に関するその他の情報も確認できます。
fastcgi_pass と proxy_pass の違いは何ですか?次の図は理解に役立ちます:
以上がNginxの基礎知識 導入事例・分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。