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 つがクラッシュしても、他のサーバーが正常に動作している限り、ユーザーの使用に影響を与えないという利点もあります。 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; } }
上記の構成は、リクエスト ポーリングをアプリケーション サーバーに割り当てます。つまり、クライアントからの複数のリクエストは、複数の処理済みサーバーによって処理される可能性があります。異なるサーバーによって。 ip-hash を使用すると、クライアントの IP アドレスのハッシュ値に基づいて処理するリクエストを固定サーバーに割り当てることができます。
構成:
upstream myapp { ip_hash; # 根据客户端ip地址hash值将请求分配给固定的一个服务器处理 server 192.168.20.1:8080; server 192.168.20.2:8080; } server { listen 80; location / { proxy_pass http://myapp; } }
また、サーバーのハードウェア構成が良いか悪いかによって、ほとんどのリクエストを良好なサーバーに割り当て、少数のリクエストを不良サーバーに割り当てたい場合は、体重を使ってコントロールすることができます。
設定:
upstream myapp { server 192.168.20.1:8080 weight=3; # 该服务器处理3/4请求 server 192.168.20.2:8080; # weight默认为1,该服务器处理1/4请求 } 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 サイトを通じて両方を開くことができます。ドメイン名: まったく異なる 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 などの言語をサポートしていませんが、nginx を通じて特定の言語またはフレームワークにリクエストをスローできます。 fastcgi (php、python、perl など)。
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 サイトの他の関連記事を参照してください。