Nginxのリバースプロキシについての理解として、Nginxはフロントエンドからの動的リクエストをバックエンドサーバーに転送する役割を担います。また、一時的にデータをキャッシュすることでアクセス速度を向上させ、ロードバランシングを実行し、バックエンドサーバーのアドレスを保護するという利点もあります。
Nginxリバースプロキシの設定例:
server {
listen 80;
server_name example.com;
location /service/ {
proxy_pass http://backend-server:3000/api/; # リバースプロキシ設定
}
}
proxy_pass: このディレクティブはプロキシサーバーのアドレスを設定するために使用され、ホスト名、IPアドレスとポート番号などの形式を取ることができます。
上記のコードの意味は、80番ポートを監聴し、http://example.com/service/...のようなパスにアクセスがあると、location /service/ {} の設定によってhttp://backend-server:3000/api/にリバースプロキシで転送されるということです。
例えば、http://example.com/service/user/loginにアクセスした場合、Nginxがリクエストを受け取り、http://backend-server:3000/api/user/loginに転送されます。これにより、最終的なリクエスト先はバックエンドサービスのアドレスと一致します。
2). Nginxロードバランシング
サービスがクラスタ形式でデプロイされている場合、Nginxはサーバーにリクエストを転送する際にロードバランシングを実行する必要があります。ロードバランシングの本質は、リバースプロキシをベースに実装されており、最終的にはリクエストの転送(分配)を行います。これは、多くの子ども(サーバー)にキャンディ(リクエスト)を分配するようなものです。どのように分配するかは、設定した戦略によって決まります。
Nginxロードバランシングの設定例:
upstream backend_pool {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
server {
listen 80;
server_name example.com;
location /service/ {
proxy_pass http://backend_pool/api; # ロードバランシング
}
}
upstream: プロキシサーバーがサーバーグループである場合、upstreamディレクティブを使用してバックエンドサーバーグループを設定できます。
上記のコードの意味は、80番ポートを監聴し、http://example.com/service/...のようなパスにアクセスがあると、location /service/ {} の設定によってhttp://backend_pool/apiにリバースプロキシで転送されます。backend_poolという名前で定義されたサーバーグループから、設定されたロードバランシング戦略(デフォルトはラウンドロビン)に基づいて具体的なサーバーに転送されます。
注意: upstreamの後の名前は自由に設定できますが、設定全体で一貫性が必要です。
Nginxロードバランシング戦略:
| **戦略名** | **説明** |
|---|---|
| ラウンドロビン | デフォルトの方式 |
| ウェイト | 重み付け方式。デフォルトは1で、重みが高いほど多くのクライアントリクエストが割り当てられる |
| ip_hash | IPアドレスに基づく割り当て方式。これにより、各訪問者は固定のバックエンドサーバーにアクセスする |
| least_conn | 最少接続数方式。リクエストを接続数が少ないバックエンドサーバーに優先的に割り当てる |
| url_hash | URLに基づく割り当て方式。同じURLは同じバックエンドサーバーに割り当てられる |
| fair | 応答時間方式。応答時間が短いサーバーが優先的に割り当てられる |
具体的な設定例:
ラウンドロビン:
upstream backend_pool {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
ウェイト:
upstream backend_pool {
server 192.168.1.10:8080 weight=90;
server 192.168.1.11:8080 weight=10;
}
ip_hash:
upstream backend_pool {
ip_hash;
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
least_conn:
upstream backend_pool {
least_conn;
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
url_hash:
upstream backend_pool {
hash $request_uri;
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
fair:
upstream backend_pool {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
fair;
}