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 オフローディング

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 は 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>
  • インストール
  • スタート: sudo systemctl start haproxy.service
  • 再スタート: sudo systemctl restart haproxy.service
  • ストップ: sudo systemctl stop haproxy.service
  • 状態確認: sudo systemctl status haproxy.service

Last Updated: 9/18/2020, 12:00:25 AM