HAProxy : ACL の設定2023/07/10 |
HAProxy の ACL の設定です。
ACL 機能により、様々な条件を定義して、コネクションを振り分けることができます。
当例では以下のような環境で設定します。
前提として、DNS の設定により、バックエンドへ振り分けたいホスト名やドメイン名は 全て HAProxy サーバーで受ける必要があります。 -----------+-------------+ | | |10.0.0.30 | +----------+-----------+ | | [ dlp.srv.world ] | | | HAProxy | | +----------------------+ | | -------------+-----------+--------------+---------- | | | |10.0.0.51 | |10.0.0.52 +-----------+----------+ | +-----------+----------+ | [ node01.srv.world ] | | | [ node02.srv.world ] | | Web Server#1 | | | Web Server#2 | +----------------------+ | +----------------------+ | -------------+-----------+--------------+---------- | | |10.0.0.53 |10.0.0.31 +-----------+----------+ +-----------+----------+ | [ node03.srv.world ] | | [ www.srv.world ] | | Web Server#3 | | Web Server#4 | +----------------------+ +----------------------+ |
[1] |
ACL の書式は下記の通りです。
acl <aclname> <criterion> [flags] [operator] [<value>] ...
<aclname> は任意の ACL 名称、[operator] は一部の criteria で使用可能です。
その他は用意されています。criteria の種類は特に非常に多いため、詳細は公式ドキュメントを参照ください。
⇒ https://www.haproxy.com/documentation/hapee/latest/onepage/#7.3.6
使用頻度が高そうな criteria や flag は以下の通りです。
|
[2] | HAProxy の設定例です。 |
root@dlp:~#
vi /etc/haproxy/haproxy.cfg # 最終行に追記 frontend http-in bind *:80 option forwardfor # ACL を定義 # HTTP リクエストヘッダーの [Host] が [node01.srv.world] acl host_node01 hdr(Host) -i node01.srv.world # HTTP リクエストヘッダーの [Host] が [node02] で始まる acl host_node02 hdr_beg(Host) -i node02 # HTTP リクエストヘッダーの [Host] に [develop] が含まれる acl host_node03 hdr_sub(Host) -i develop # HTTP リクエストヘッダーの [Host] の ドメイン名部分が [virtual.host] acl host_virtual_host hdr_dom(Host) -i virtual.host # HTTP リクエストの PATH の部分が [/work] で始まる acl path_workdir path -m beg /work # HTTP リクエストの PATH の部分に [test] が含まれる acl path_testdir path_sub -i test # HTTP リクエストのクエリー部分に [script] が含まれる acl query_script query -m sub script # アクセス元 クライアント IP が [10.0.0.5/32] acl src_ip src -m ip 10.0.0.5/32 # 各 ACL にマッチした場合の動作を設定 use_backend www_node01 if host_node01 || path_workdir use_backend www_node02 if host_node02 || path_testdir use_backend www_node03 if host_node03 || query_script use_backend www_default if host_virtual_host || src_ip default_backend www_default backend www_node01 server node01 10.0.0.51:80 check backend www_node02 server node02 10.0.0.52:80 check backend www_node03 server node03 10.0.0.53:80 check backend www_default server www_default 10.0.0.31:80 check systemctl restart haproxy |
[3] | 任意のクライアントコンピューターから HAProxy サーバーへアクセスして設定通りの動作となるか確認しておくとよいでしょう。 |
Sponsored Link |