Ubuntu 22.04 で HAProxy を使う場合、まず frontend、backend、ヘルスチェックの役割を分けて考えます。HAProxy は、外部または上位のクライアントから受けた通信を複数の上流サーバーへ振り分けるリバースプロキシ / ロードバランサーです。
この記事は、Ubuntu 22.04 の既存環境で HAProxy の設定を読み直すための記事です。新規構築では Ubuntu 26.04 側の記事を優先しつつ、22.04 環境の設定確認や古い構築記録の読み替えに使ってください。
- HAProxy の
frontendとbackendの役割 - HTTP ロードバランサーの基本設定
- ヘルスチェックの確認対象
- ログと統計画面の確認
- TLS 終端を行う場合の注意点
書籍
マスタリング TCP/IP 入門編 第6版
TCP/IP、Ethernet、VLAN、ルーティングなど、ネットワークの基礎を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
HAProxy の位置づけ
HAProxy は、外部から内部サービスへ向かう通信を受ける入口に置きます。Squid のように内部クライアントから外部へ出るフォワードプロキシとは通信の向きが違います。
| 項目 | 主な役割 |
|---|---|
frontend | クライアントから接続を受ける入口 |
backend | 実際に処理する上流サーバー群 |
| ヘルスチェック | 上流サーバーが応答可能か確認する |
| TLS 終端 | HAProxy で HTTPS を受け、内部へ渡す構成 |
| リバースプロキシ | 外部から内部サービスへ向かう通信の中継 |
既存環境を確認するときは、どのアドレスとポートで受け、どの上流サーバーへ流し、どの条件で上流を異常扱いにするかを分けて見ます。
HAProxy をインストールする
Ubuntu 22.04 の標準リポジトリから HAProxy をインストールします。
sudo apt update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y haproxyHTTP ロードバランサーを設定する
HTTP の入口を frontend、上流 Web サーバー群を backend として設定します。ここでは上流サーバーを 10.1.0.21 と 10.1.0.22 の例にします。
sudo tee /etc/haproxy/haproxy.cfg <<'EOF'
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5s
timeout client 30s
timeout server 30s
frontend web_front
bind *:80
default_backend web_back
backend web_back
balance roundrobin
option httpchk GET /
server web1 10.1.0.21:80 check
server web2 10.1.0.22:80 check
EOF
sudo haproxy -c -f /etc/haproxy/haproxy.cfg
sudo systemctl restart haproxyhaproxy -c で設定ファイルの構文を確認してから再起動します。既存環境では、上流サーバーの IP アドレス、DNS 名、待ち受けポートが実際の構成と一致しているかを確認します。
動作確認する
サービス状態、待ち受け、HTTP 応答を確認します。
systemctl status haproxy --no-pager
ss -ltnp | grep ':80'
curl -I http://lb.example.local/接続できない場合は、HAProxy 側だけでなく、上流サーバーの待ち受け、ファイアウォール、名前解決、経路も合わせて見ます。
ログを確認する
HAProxy のログは syslog 経由で出る構成が一般的です。Ubuntu の環境により journald や syslog 側を確認します。
sudo journalctl -u haproxy -n 80 --no-pager
sudo grep haproxy /var/log/syslog | tail -n 50ログでは、クライアントからの接続、選ばれた上流、ステータスコード、応答時間を確認します。単に 200 が返るかだけではなく、どの上流へ流れているかも見ます。
統計画面を有効化する
内部管理用に stats 画面を有効化できます。外部へ公開しないように、待ち受け先と認証を制限します。
sudo tee -a /etc/haproxy/haproxy.cfg <<'EOF'
listen stats
bind 127.0.0.1:8404
mode http
stats enable
stats uri /stats
stats refresh 10s
stats auth admin:change-me
EOF
sudo haproxy -c -f /etc/haproxy/haproxy.cfg
sudo systemctl reload haproxy
curl -I http://127.0.0.1:8404/statsstats 画面は便利ですが、上流の状態や構成が見える管理画面です。公開アドレスではなく、管理ネットワークやローカルホストに限定します。
TLS 終端を行う場合
HAProxy で TLS を終端する場合は、証明書と秘密鍵を結合した PEM ファイルを指定します。内部 CA と公開 CA のどちらを使うかは、公開範囲に応じて決めます。
sudo install -d -m 0750 -o root -g haproxy /etc/haproxy/certs
sudo tee /etc/haproxy/certs/server.example.local.pem < server.example.local.crt
sudo tee -a /etc/haproxy/certs/server.example.local.pem < server.example.local.key
sudo chmod 0640 /etc/haproxy/certs/server.example.local.pem
sudo chown root:haproxy /etc/haproxy/certs/server.example.local.pemTLS 入口を追加する場合は、frontend 側で証明書を指定し、内部へ渡すプロトコルを決めます。
sudo tee -a /etc/haproxy/haproxy.cfg <<'EOF'
frontend web_tls_front
bind *:443 ssl crt /etc/haproxy/certs/server.example.local.pem
http-request set-header X-Forwarded-Proto https
default_backend web_back
EOF
sudo haproxy -c -f /etc/haproxy/haproxy.cfg
sudo systemctl reload haproxyTLS 終端を HAProxy に寄せる場合、証明書更新、秘密鍵の権限、上流へ渡すヘッダー、上流側で HTTPS を認識する設定を合わせて確認します。
ヘルスチェックの考え方
ロードバランサーでは、単にポートが開いていることだけでなく、アプリケーションとして正常に応答できるかを見ることが重要です。
sudo tee -a /etc/haproxy/haproxy.cfg <<'EOF'
backend web_back_health
balance roundrobin
option httpchk GET /health
http-check expect status 200
server web1 10.1.0.21:80 check
server web2 10.1.0.22:80 check
EOF
sudo haproxy -c -f /etc/haproxy/haproxy.cfgヘルスチェック用の URL は、アプリケーションの依存先まで含めて確認するのか、Web サーバーの生存だけを見るのかで意味が変わります。障害時にどの上流を切り離したいかに合わせて決めます。
運用上の注意
- HAProxy はフォワードプロキシではなくリバースプロキシとして考える
- 上流サーバーは DNS 名または固定 IP で管理する
- ヘルスチェックは障害時の切り離し単位に合わせる
- TLS 終端する場合は証明書更新と秘密鍵管理を決める
- WAF を入れる場合は HAProxy と Apache / ModSecurity の配置順を決める
まとめ
Ubuntu 22.04 の HAProxy は、複数の Web サーバーへ通信を振り分けるリバースプロキシ / ロードバランサーです。frontend、backend、ヘルスチェック、ログ、TLS 終端を分けて見ると、既存環境の設定意図を確認しやすくなります。
22.04 の既存環境を見直すときは、入口、上流、正常性判定、証明書、ログを分けて確認します。新しい環境へ移す場合は、ロードバランサーで TLS を終端するのか、WAF をどこに置くのか、上流サーバーの切り離し条件をどうするのかまで合わせて見直します。

