5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pound設定メモ書き

Posted at

これまでELBを使ってサービスを展開していましたが、比較的安価に柔軟なスケーリングができる反面、できないことも多いため、EC2+Poundで置き換えられないかと思い研究中です。
ELBの中身ってひょっとしてPoundなんじゃね?と思うほど仕様がよく似ていますので、移行自体は非常に簡単です。
また、Poundだけであれば非常に消費リソースも少ないので、そこそこのトラフィックもさばけそうです。

で、以下はPoundの設定ファイルとちょっとした注意点です。
インストールは普通にyumでできますので、省略します。

/etc/pound.cfg
User "pound"
Group "pound"
Control "/var/lib/pound/pound.cfg"

LogLevel 3

Alive 30

ListenHTTP
	Address 0.0.0.0
	Port 80
	RewriteLocation 0
        Service
                HeadRequire "Host: XXXXX.example.co.jp"
                BackEnd
                        Address AAA.AAA.AAA.AAA
                        Port    80
                End
                BackEnd
                        Address BBB.BBB.BBB.BBB
                        Port    80
                End
	End
End

ListenHTTPS
	Address 0.0.0.0
	Port    443
	Cert    "/etc/sslkeys/example.co.jp.pem"
	xHTTP	0
	RewriteLocation 0
	AddHeader "X-Forwarded-Proto: https"
	AddHeader "X-Forwarded-By: SSL"
	AddHeader "X-Forwarded-Host: SSL"
        AddHeader "X-Forwarded-Port: 443"
	HeadRemove "X-Forwarded-Proto"
	HeadRemove "X-Forwarded-By"
	HeadRemove "X-Forwarded-Host"
	HeadRemove "X-Forwarded-Port"
        Service
                HeadRequire "Host: XXXXX.example.co.jp"
                BackEnd
                        Address AAA.AAA.AAA.AAA
                        Port    80
                End
                BackEnd
                        Address BBB.BBB.BBB.BBB
                        Port    80
                End
        End
End

涙がでるほど簡単ですね。
幼稚園児でも一見して理解できるほど単純な構造です。
そして一見して分かる通り、SSL周りに関してはELBと全く同じ仕様をとっています。
80ポートアクセス時は通常通りの割り振り。
443ポートアクセス時は、ヘッダ類を付与した上でバックエンドに80ポート経由で割り振り。
なお、今回はまだ設定していませんが、ロードバランサレベルでの仮想ホストの設定も可能ですし、仮想ホストごとにバックエンドを振り分けることも可能です
有能ですね、Poundさん。


ちなみに、うちの会社とサービス基準ですが、留意点は以下の3つです。

1. アクセス制御方法の取り扱い方法を決めておく

 SecurityGroupは引き続きELBと同じものをEC2単位で使用可能ですが、それに加えて「iptables」「Poundのアクセス制御」の2つが使用可能になります。
 iptablesは機能的にSecurityGroupと近いネットワーク層のセキュリティシステムで、Poundのアクセス制御はapacheのAllowDenyと近いアプリケーション層のセキュリティシステムです。
 パターンに応じた柔軟なアクセス制御が実現できるようになるので、運用しているサービスに対応したアクセス制御方法を取り決めておく必要があります。

2. ログの出力先に注意する

 もしyumで入れたり特に設定せずmakeした場合、ログの出力先は/var/log/messagesになってしまいます。後から変更するには、残念ながらsyslogを調整するしかないようです。
 また、LogLevelとrotationも必要に応じて調整する必要があります。

3. 転送時の挙動を設定する

 さり気なく先述のログサンプル内に書いてあった以下の部分がこれに相当します。

RewriteLocation 0

RewriteLocationの値と挙動は以下の通りです。

0 : RewriteLocationを一切無効にする
1 : Poundの設定通りに書き換える(デフォルト)
2 : バックエンドの設定通りに書き換えて、もしバックエンドから指定されていなければPoundの設定通りに書き換える

例えばバックエンド側で「このURLにリダイレクト!」と命令しても、デフォルトのままではPoundの設定を優先してしまうため、うまくリダイレクトが働かないことがあります。
 うちのサービスでもApacheやCakePHPがバックエンド側からHTTP→HTTPSのリダイレクトをかけていましたが、何度やっても無限ループになってしまっていました。ドツボにはまっていたのでmanを確認していたところRewriteLocationに行き当たり、解決した次第です。


以上です。

今後はモニタリングとスケーリングの自動化について研究していきます。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?