Nginxリバースプロキシの理解と実装

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;
}

タグ: nginx リバースプロキシ ロードバランシング 負荷分散

7月30日 02:30 投稿