FreeBSD 14
Sponsored Link

Nginx : 負荷分散の設定2024/02/13

 
Nginx での負荷分散の設定です。ロードバランサーとして利用できます。
当例では以下のような環境を例に設定します。
-----------+---------------------------+-----
           |                           |
           |10.0.0.31                  |
+----------+-----------+               |
|   [ www.srv.world ]  |               |
|        Nginx         |               |
+----------------------+               |
                                       |
------------+--------------------------+--------------------------+------------
            |                          |                          |
            |10.0.0.51                 |10.0.0.52                 |10.0.0.53
+-----------+----------+   +-----------+----------+   +-----------+----------+
| [ node01.srv.world ] |   | [ node02.srv.world ] |   | [ node03.srv.world ] |
|      Web Server#1    |   |      Web Server#2    |   |      Web Server#3    |
+----------------------+   +----------------------+   +----------------------+

[1]
[2] Nginx サーバーへのリクエストをバックエンド Web サーバーへ負荷分散をするように設定します。
root@www:~ #
vi /usr/local/etc/nginx/nginx.conf
# [http] セクション内に追記
# [backup] を指定すると [backup] 以外が通信不能な場合のみバランシング
# [weight=*] で重み付け (weight=2 の場合, 指定無サーバーと 2:1 の割合でバランシング)

http {
    upstream backends {
        server node01.srv.world:80 weight=2;
        server node02.srv.world:80;
        server node03.srv.world:80 backup;
    }


    # [server] セクション内を全て変更
    # サーバー名や証明書は自身のものに置き換え
    server {
        listen      80 default_server;
        listen      [::]:80 default_server;
        listen      443 ssl http2 default_server;
        listen      [::]:443 ssl http2 default_server;
        server_name www.srv.world;
        
        ssl_certificate "/usr/local/etc/letsencrypt/live/www.srv.world/fullchain.pem";
        ssl_certificate_key "/usr/local/etc/letsencrypt/live/www.srv.world/privkey.pem";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  5m;

        proxy_redirect      off;
        proxy_set_header    X-Real-IP $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header    Host $http_host;

        location / {
                proxy_pass http://backends;
        }
    }

root@www:~ #
service nginx reload
[3] バックエンド Nginx サーバーで X-Forwarded-For ヘッダーをロギングするよう設定しておきます。
root@node01:~ #
vi /usr/local/etc/nginx/nginx.conf
# 26-28行目 : コメント解除

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    # [server] セクションに追記
    server {
        listen       80;
        server_name  node01.srv.world;
        set_real_ip_from   10.0.0.0/24;
        real_ip_header     X-Forwarded-For;


root@node01:~ #
service nginx reload
[4] 任意のクライアントコンピューターからフロントエンドの Nginx サーバーへ HTTP/HTTPS アクセスして動作を確認します。 また、バックエンドの Nginx ログ [/var/log/nginx/access.log] にアクセス元のクライアントホストの IP アドレスがロギングされていることも確認しておくとよいでしょう。
関連コンテンツ