ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
概要
HAProxy (High Availability Proxy) は、TCP および HTTP に対応した高性能なロードバランサ兼リバースプロキシです。少ないリソースで大量の同時接続を捌けることから、大規模 Web サービスのフロントで負荷分散を担う定番ソフトウェアとして使われています。ロードバランサ としても リバースプロキシ としても機能し、L4 (TCP) と L7 (HTTP) の両方の振り分けに対応します。親項目は 負荷分散・プロキシ・CDN です。
nginx がリバースプロキシ + 静的配信に強いのに対し、HAProxy は負荷分散と振り分けに特化しており、ヘルスチェック・きめ細かい ACL・充実した統計画面など、ロードバランサとしての機能が豊富なのが特徴です。
仕組み
HAProxy の設定は、役割ごとに分かれたセクションで構成されます。中核となるのは frontend と backend です。
- global: プロセス全体の設定 (最大接続数・ログ出力・実行ユーザなど)。
- defaults: frontend/backend 共通の既定値 (タイムアウト・モードなど)。
- frontend: クライアントからの受け口。どのアドレス:ポートで待ち受け、どの条件でどの backend へ渡すかを定義する。
- backend: 振り分け先のサーバ群。分散アルゴリズム (
roundrobin/leastconn等) とヘルスチェックを定義する。
frontend では ACL (Access Control List) を使って「このパスなら」「このヘッダなら」という条件を定義し、条件に応じて送り先の backend を切り替えられます。各 backend のサーバには定期的なヘルスチェックが行われ、応答しないサーバは自動的に振り分け対象から外れ、復帰すれば再び加わります。これにより一部のサーバが落ちてもサービスを継続できます (高可用性)。
設定・実用例
/haproxy.cfg の実用的な例です。80 番で受け、/api で始まるパスは API サーバ群へ、それ以外は Web サーバ群へ振り分けます。統計画面も有効化しています。
global
maxconn 20000
log /dev/log local0
defaults
mode http
timeout connect 5s
timeout client 30s
timeout server 30s
# 受け口
frontend http_in
bind *:80
# ACL: パスが /api で始まるか判定
acl is_api path_beg /api
# 条件に応じて backend を切り替え
use_backend api_servers if is_api
default_backend web_servers
# API サーバ群 (最小接続方式 + ヘルスチェック)
backend api_servers
balance leastconn
option httpchk GET /healthz
server api1 10.0.0.31:8000 check
server api2 10.0.0.32:8000 check
# Web サーバ群 (ラウンドロビン + 重み付け)
backend web_servers
balance roundrobin
server web1 10.0.0.41:80 check weight 3
server web2 10.0.0.42:80 check weight 1
# 統計画面 (運用監視用)
listen stats
bind *:8404
stats enable
stats uri /stats
stats refresh 5s
設定変更後は構文チェックしてから再起動します。
# 設定ファイルの構文チェック
haproxy -c -f /etc/haproxy/haproxy.cfg
# 反映 (systemd 環境)
sudo systemctl reload haproxy
ブラウザで http://<HAProxyのIP>:8404/stats を開くと、各サーバの状態 (UP/DOWN)・接続数・エラー数などをリアルタイムに確認できます。
主な用途
- 大規模な負荷分散: 多数のバックエンドへ高速に要求を分散し、スケールアウトを支える。
- TCP レベルの中継 (L4): HTTP 以外 (データベース接続・MQ など) も
mode tcpで負荷分散できる。 - 条件付きルーティング: ACL でパス・ホスト・ヘッダ別に backend を切り替える。
- 高可用性: ヘルスチェックで故障機を自動切り離しし、サービス継続性を高める。
- 運用監視: 統計画面で接続状況・サーバ状態を可視化し、障害の早期発見に使う。
nginx との比較
| 観点 | HAProxy | nginx |
|---|---|---|
| 得意分野 | 負荷分散・振り分けに特化 | リバプロ + 静的配信 |
| 対応レイヤ | L4 (TCP) / L7 (HTTP) | 主に L7 (HTTP) ※stream で L4 も可 |
| ヘルスチェック | 非常に充実 | 基本的 (商用版で拡張) |
| 統計画面 | 標準で stats 画面あり | 標準は簡易 (status のみ) |
| 静的配信 | 不可 (中継専用) | 得意 |
注意点
- 統計画面の保護:
/statsは内部情報を晒すため、認証・アクセス元制限を必ずかける。外部公開は厳禁。 - タイムアウトの設定漏れ:
timeoutを適切に設定しないと、滞留したコネクションがリソースを食い潰す。 - SSL 終端の負荷: HAProxy で TLS 終端する場合は CPU 負荷が上がる。証明書と暗号スイートの選定に注意する。
- クライアント IP の引き継ぎ: バックエンドへ元 IP を伝えるには
option forwardforでX-Forwarded-Forを付与する。 - 単一障害点: HAProxy 自体が落ちると全断する。keepalived 等で冗長化 (VRRP による仮想 IP の引き継ぎ) を組む。
関連リンク
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- フォワードプロキシ
- リバースプロキシ
- ロードバランサ
- nginxリバースプロキシ設定
- HAProxy
- CDN
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?