# HAproxy の設定例
# ポート 80 で待ち受け、10004 と 10005 にラウンドロビンで割り振り
frontend main
bind *:80
default_backend app
backend app
server app1 127.0.0.1:10004
server app2 127.0.0.1:10005
# HTTPS with SSL オフローディング (opens new window)
frontend ssl_proxy
mode http
default_backend app
bind *:443 ssl crt /etc/letsencrypt/live/mydomain.com/mydomain.com.4haproxy.pem
# ヴァーチャルホスト tako.mydomain.com, ika.mydomain.com, uni.mydomain.com を SSL オフローディング
frontend ssl_proxy
mode http
default_backend app
bind *:443 ssl crt /etc/letsencrypt/live/mydomain.com/mydomain.com.4haproxy.pem
acl is_tako hdr(host) -m sub tako.uedasoft.com
acl is_ika hdr(host) -m sub ika.uedasoft.com
acl is_ika hdr(host) -m sub uni.uedasoft.com
backend tako
server tako 127.0.0.1:10004
backend ika
server ika 127.0.0.1:10005
backend uni
server uni 127.0.0.1:10006
以下は失敗作です
backend ssl
acl tako hdr(host) -m str tako.mydomain.com
use-server tako if tako
server tako 127.0.0.1:10004
acl ika hdr(host) -m str ika.mydomain.com
use-server ika if ika
server ika 127.0.0.1:10005
acl uni hdr(host) -m str uni.mydomain.com
use-server uni if uni
server uni 127.0.0.1:10006
- ポイント
- 失敗作みたいに acl を front end ではなく back end 側に書いても一見うまく切り分けできてるように見えるのですが、後でなにがおきてるのかわからないような変な現象、たとえばどこにもマッチしない筈のドメインが先頭の acl にマッチしちゃうとかがおきて、謎解きを楽しめます
- Matching strings (opens new window) は exact match の
-m str
よりも substring match の-m sub
にしておくとtako.mydomain.com:443
なんてホストヘッダつけてくる IoT なクライアントさんにも対応できます
- Matching strings (opens new window) は exact match の
- 失敗作みたいに acl を front end ではなく back end 側に書いても一見うまく切り分けできてるように見えるのですが、後でなにがおきてるのかわからないような変な現象、たとえばどこにもマッチしない筈のドメインが先頭の acl にマッチしちゃうとかがおきて、謎解きを楽しめます
# references
- ドキュメント (opens new window)
- version confirmation
ueda@scw-a:~$ /usr/sbin/haproxy -v
HA-Proxy version 1.7.5-2 2017/05/17
Copyright 2000-2017 Willy Tarreau <willy@haproxy.org>
- インストール (opens new window)
- スタート:
sudo systemctl start haproxy.service
- 再スタート:
sudo systemctl restart haproxy.service
- ストップ:
sudo systemctl stop haproxy.service
- 状態確認:
sudo systemctl status haproxy.service
← haproxy