# 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 なクライアントさんにも対応できます

# references

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

Last Updated: 2020/9/18 0:00:25