Ubuntu 22.04 で HAProxy を使い、ロードバランサーを構築する手順です。HAProxy は、外部または上位のクライアントから受けた通信を複数のバックエンドサーバーへ振り分けるリバースプロキシ / ロードバランサーです。
この記事では、HTTP ロードバランサーとしての基本構成、ヘルスチェック、ログ、統計画面、TLS 終端を分けて整理します。Squid のようなフォワードプロキシとは通信の向きが違います。
マスタリング TCP/IP 入門編 第6版
TCP/IP、Ethernet、VLAN、ルーティングなど、ネットワークの基礎を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
関連するプロキシ記事
Squid はフォワードプロキシ、HAProxy はリバースプロキシ / ロードバランサーです。通信の向きと責務を分けて読むと、境界設計を整理しやすくなります。
- Ubuntu 22.04 Squid プロキシサーバー構築
- Ubuntu 22.04 HAProxy ロードバランサー構築
- フォワードプロキシ認証の課題 – LDAP / Basic 認証 / HTTPS プロキシ / SAML・OIDC の整理
HAProxy の位置づけ
| 項目 | 内容 |
|---|---|
| frontend | クライアントから接続を受ける入口 |
| backend | 実際に処理する上流サーバー群 |
| health check | 上流サーバーが生きているか確認する |
| TLS termination | HAProxy で TLS を終端し、内部へ HTTP で渡す構成 |
| reverse proxy | 外部から内部サービスへ向かう通信の中継 |
HAProxy をインストールする
sudo apt update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y haproxyHTTP ロードバランサーを設定する
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 haproxy動作確認する
systemctl status haproxy --no-pager
ss -ltnp | grep ':80'
curl -I http://lb.example.local/ログを確認する
HAProxy のログは syslog 経由で出る構成が一般的です。Ubuntu の環境により /var/log/haproxy.log または journald / syslog 側を確認します。
sudo journalctl -u haproxy -n 80 --no-pager
sudo grep haproxy /var/log/syslog | tail -n 50統計画面を有効化する
内部管理用に 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/statsTLS 終端を行う場合
HAProxy で TLS を終端する場合は、証明書と秘密鍵を結合した PEM ファイルを指定します。内部 CA や公開 CA のどちらを使うかは、公開範囲に応じて決めます。
sudo install -d -m 0750 -o root -g haproxy /etc/haproxy/certs
sudo sh -c 'cat server.example.local.crt server.example.local.key > /etc/haproxy/certs/server.example.local.pem'
sudo chmod 0640 /etc/haproxy/certs/server.example.local.pem
sudo chown root:haproxy /etc/haproxy/certs/server.example.local.pemfrontend 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ヘルスチェックの考え方
ロードバランサーでは、単にポートが開いていることだけでなく、アプリケーションとして正常に応答できるかを確認することが重要です。
backend web_back
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運用上の注意
- HAProxy はフォワードプロキシではなくリバースプロキシとして考える
- 上流サーバーは DNS 名または固定 IP で管理する
- ヘルスチェックはアプリケーションの正常性に近いパスを使う
- TLS 終端する場合は証明書更新と秘密鍵管理を設計する
- WAF を入れる場合は HAProxy と Apache / ModSecurity の配置順を決める
まとめ
Ubuntu 22.04 の HAProxy は、複数の Web サーバーへ通信を振り分けるリバースプロキシ / ロードバランサーです。frontend、backend、health check、ログ、TLS 終端を分けて考えると、構成を整理しやすくなります。



