Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
73 lines (59 sloc) 3.56 KB

HAProxy の各種設定方法

リファレンス

ロギング

HTTP リクエストのログを rsyslog 経由で/var/log/haproxy.logに出力する。

/etc/haproxy/haproxy.cfg
global
    log 127.0.0.1 local0

defaults
    log global
    option httplog
/etc/rsyslog.d/haproxy.conf
$ModLoad imudp
$UDPServerRun 514
$UDPServerAddress 127.0.0.1
local0.* /var/log/haproxy.log

スティッキーセッション

アプリケーションのクッキーを利用する方法

アプリケーションがJSESSIONIDという名前のクッキーを使ってセッションを管理している場合は下記のように設定する。

/etc/haproxy/haproxy.cfg
backend servers
    appsession JSESSIONID len 32 timeout 3h

HAProxy はバックエンドサーバからのレスポンスを調べて、指定した名前のクッキー(上記の設定ではJSESSIONID)の設定要求(おそらくSet-Cookieヘッダ)が含まれていれば、そのクッキーの値とレスポンスを返したサーバを紐付ける。timeoutパラメータに指定した期間使用されないと、紐付けは解除される。

上記の設定では、クライアントがJSESSIONIDという名前のクッキーを使ってリクエストした際に、そのクッキーの値に紐付くサーバが存在しない場合には、バランシングのアルゴリズムによって適当なサーバが選択される。 このリクエストのレスポンスにJSESSIONIDという名前のクッキーの設定要求が含まれていれば紐付けが追加されるが、そうでなければ紐付けは追加されない。 この振る舞いを変更して、後者の場合にリクエストで指定されたJSESSIONIDの値とレスポンスを返したサーバの名前の紐付けを追加するには、以下のようにrequest-learnパラメータを指定する。

/etc/haproxy/haproxy.cfg
backend servers
    appsession JSESSIONID len 32 timeout 3h request-learn

独自のクッキーを利用する方法

SERVERIDという名前のクッキーに、リクエストをserver1へ振り分けた場合はs1を、server2へ振り分けた場合はs2を格納してセッションを維持するには下記のように設定する。

/etc/haproxy/haproxy.cfg
backend servers
    cookie SERVERID insert nocache indirect
    server server1 server1:80 cookie s1
    server server2 server2:80 cookie s2

nocacheパラメータを指定すると、レスポンスヘッダにCache-Control: privateが追加される。 これにより、クッキーがキャッシュサーバなどにってキャッシュされることを防ぐ。

insertパラメータとindirectパラメータを同時に指定すると、クッキーがバックエンドサーバに送られなくなる。

X-Forwarded-For

本来の送信元アドレスをリクエストのX-Forwarded-Forヘッダに格納してバックエンドサーバに送信する。

/etc/haproxy/haproxy.cfg
frontend balancer
    option forwardfor

stunnel

stunnel は X-Forwarded-Forヘッダの追加をサポートしていない。 メーリングリストには stunnel にX-Forwarded-Forヘッダの追加をサポートするパッチが投稿されているが、keep-alive 時に正しく動作しないらしい。

You can’t perform that action at this time.