リバースプロキシPound

このエントリーをはてなブックマークに追加
1名無しさん@お腹いっぱい。
速い、安定、簡単と三拍子そろったHTTPリバースプロキシ、
Poundについて語るスレであります。

配布元
http://www.apsis.ch/pound

紹介記事
http://php.y-110.net/wiki/index.php?%A5%ED%A1%BC%A5%C9%A5%D0%A5%E9%A5%F3%A5%B5%A1%A7Pound

Poundの機能に不足を感じる方はこちらへ(Squidスレ)
http://pc10.2ch.net/test/read.cgi/unix/1138826120/l50
2名無しさん@お腹いっぱい。:2006/12/30(土) 19:14:36
おまけ: 俺が適当に書いたinitスクリプト(ただしLinux用)

#!/bin/bash

# init file for pound
#
# chkconfig: - 50 50
# description: HTTP Reverse Proxy Daemon
#
# processname: /usr/local/sbin/pound
# config: /usr/local/etc/pound.conf
# pidfile: /var/run/pound.pid
#
# source function library
. /etc/init.d/functions

prog="pound"
RETVAL=1

start() {
echo -n $"Starting $prog: "
daemon /usr/local/sbin/pound
RETVAL=$?
echo
touch /var/lock/subsys/pound
return $RETVAL
}
3名無しさん@お腹いっぱい。:2006/12/30(土) 19:14:59
終了
4名無しさん@お腹いっぱい。:2006/12/30(土) 19:15:42
続き

stop() {
echo -n $"Stopping $prog: "
killproc /usr/local/sbin/pound
RETVAL=$?
echo
rm -f /var/lock/subsys/pound
return $RETVAL
}

reload(){
stop
start
}

restart(){
stop
start
}

condrestart(){
[ -e /var/lock/subsys/pound ] && restart
return 0
}
5名無しさん@お腹いっぱい。:2006/12/30(土) 19:16:27

おわり

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
reload)
reload
;;
condrestart)
condrestart
;;
status)
status pound
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}"
RETVAL=1
esac

exit $RETVAL
6名無しさん@お腹いっぱい。:2006/12/30(土) 19:39:04
適当に書いたことにしたいのだろうけど、本当はどこからパクった?
71:2006/12/30(土) 19:41:20

あーすんません。
「適当」ってのは、パクって適当に改変したって意味です。
元になったのは、確かucd-snmpとかいうやつです。
8名無しさん@お腹いっぱい。:2006/12/30(土) 20:00:14
Poundをロードバランスするにはどうすんの?
なにか箱を前に入れるの?
9名無しさん@お腹いっぱい。:2006/12/30(土) 20:57:22
大規模なWebサイトでない限り、いまのところ
Pound自体をロードバランスする必要はないと思いますが、
どうですかね。

自分は、最大同時コネクション数が2 300のWebアプリでPoundを使ってますが、
Pentium2 450MHz x 2というヘボスペックでも、
Poundの負荷が問題になったことはないです。

ただ、poundは全てのログをsyslogに吐くので、
syslogが遅いと、それに引きずられるかもしれないですが。

冗長性を持たせるのが目的なら、LVSとかですかね。

10名無しさん@お腹いっぱい。:2007/01/04(木) 16:04:32
書き込みねーな。誰も使ってないのか?
俺はスゲー便利だと思うけどな。
11名無しさん@お腹いっぱい。:2007/01/04(木) 16:46:30
Poundだけじゃなく、Squid、
Apacheモジュールタイプ、WASやOASについてくるやつ、
はたまた、ServerIronのようなハードウェアタイプなどなど。
わかりやすく比較している記事とかないかなぁ。
12名無しさん@お腹いっぱい。:2007/01/05(金) 11:02:42
軽く探してみたけど、こんなのしか見つかんかった。

ttp://kevinminnick.blogspot.com/2006/03/my-evaluation-of-reverse-proxy.html
13名無しさん@お腹いっぱい。:2007/01/31(水) 02:05:59
Debian GNU/Linux etch (Linux kernel 2.6.19) 上で pound 2.0 を動かしています。

pound: MONITOR: worker exited on signal 11, restarting...

というエラーを吐いてどうもうまく動作しません。ググってみたところ NPLT やら
LD_ASSUME_KERNEL というキーワードが見つかったので

env LD_ASSUME_KERNEL=2.4.19 /usr/sbin/pound

としてみたのですが、手元の環境では変化ありませんでした。
適当に試行錯誤してみた結果 pound.cfg の Service ブロック内に Session ブロック
を書いて Type として IP 以外を指定すると問題なく reverse proxy として動作する
ようになったのですが、みなさんのお手元ではこういう問題は発生していないですかね?

1413:2007/01/31(水) 12:37:06
自己レスですが、pound 2.2 だと問題ないですね。
昨日はどういうわけか http://www.apsis.ch/pound/ にアクセスできなかったので
確認を怠ってしまったのですが deb 化されている 2.0 って最新版じゃなかったのね orz
15名無しさん@お腹いっぱい。:2007/01/31(水) 12:48:28
バイナリパッケージにはよくあること
16名無しさん@お腹いっぱい。:2007/03/21(水) 04:50:14
>>14
多分関係ないと思うが、
昔、poundでOpenSSH関連の意味不明なエラーが出て困ったことがあった。
詳細な理由は不明だが、どうやら「rootじゃないアカウントでpoundをビルドしたこと」が
原因だったようだ。それ以来rootでmakeするようにしている。
17名無しさん@お腹いっぱい。:2007/03/21(水) 16:43:54
rootでビルドしないと使えないソフトってなんだか怪しいなあ
18名無しさん@お腹いっぱい。:2007/03/22(木) 03:21:59
なんで?危なくないよ
19名無しさん@お腹いっぱい。:2007/03/27(火) 01:02:36
2chを読むことは出来るけど
書くことが出来ないようにできる?
20名無しさん@お腹いっぱい。:2007/03/27(火) 01:07:00
リバースプロキシなんですけど。
21名無しさん@お腹いっぱい。:2007/03/27(火) 05:41:24
>>19
ここは君の来るところではない。
Windows板の初心者スレあたりで質問してきなさい。
22名無しさん@お腹いっぱい。:2007/05/09(水) 02:08:28
2.2 にあった NO_SYSLOG のマクロ定義が 2.3 でなくなってしまったのは何故なんでしょうか。
CHANGELOG 眺めてもわからない… configure --disable-log が有効にならないみたいなんですけど。
23名無しさん@お腹いっぱい。:2007/05/18(金) 18:01:23
手動で消せばいいじゃねーか
ソース短いんだし
24名無しさん@お腹いっぱい。:2008/02/19(火) 18:44:55
うぉ.
Pound最高.
Cookieのぞいてセッション見てくれる.
25名無しさん@お腹いっぱい。:2008/02/28(木) 15:31:03
なんという過疎っぷり…
こんなに便利なのになぁ
26名無しさん@お腹いっぱい。:2008/04/06(日) 06:23:47
>>25
完成度が高過ぎて話すネタがないのかも知れませんね、って1ヶ月後に書くのもなんですが。
27名無しさん@お腹いっぱい。:2008/04/10(木) 15:01:04
バックエンドを変更したときなど,
あるいはバックエンドの一部を落としたい時など,
設定ファイルを読み直させるにはどうすればいいんでしょうか?
kill -HUP <pid> ?
28名無しさん@お腹いっぱい。:2008/04/11(金) 04:36:25
バックエンドを落とすだけなら
poundctl
でなんとかなりそうじゃない?
29名無しさん@お腹いっぱい。:2008/04/11(金) 06:37:17
>>28
ごめん、不十分な説明だった。
バックエンドを落として、別のに切り替えたいときがあって。
まぁ新しいバックエンドを同じIPアドレスにすればいいのかも試練が。

それにしても堅牢だわ、pound。SSLオフロードもできるし。
商用のSSLオフロードバランサが商売になるのってどれくらいの
サイト規模なんだろうねぇ。
30名無しさん@お腹いっぱい。:2008/04/11(金) 21:47:59
>>29
大人になって誰かに責任をなすりつけられることの意味を知ったら小規模サイトでも使うよ

というのは冗談として,運用担当グループがスキル的にpoundの設定変更を任せられる
レベルじゃない場合は箱物を選択するんじゃない?

いつもBIG-IPとServerIronとArrayとPoundを並列に提案して客に選ばせるんだけど,
日本ではBIG-IP以外の選択を受けたことないよ.アメリカだとたまにArrayやPoundを
選択してもらえる時がある.
31名無しさん@お腹いっぱい。:2008/04/11(金) 23:09:35
BIG-IPだと400万円とか一桁違うだろ。みんな金持ってるなあ。
まあ人件費よりは安いか…
てかエロサイト?
32名無しさん@お腹いっぱい。:2008/04/11(金) 23:37:35
WASとかOracleなんかを使ってれば、付属のキャッシュサーバが使えたりするし、
BIG-IPやらServerIronあたりのメジャーなやつと連携が取れるようになっていたりもする。
33名無しさん@お腹いっぱい。:2008/04/21(月) 18:03:48
Pound使ってるとApacheにPoundのIPアドレスが渡ってしまうから
アクセス制限かけられねーよ…と思っていたら
mod_extract_forwarded2
なるものがあるのね

debian用パッケージはないのね
34名無しさん@お腹いっぱい。:2008/04/22(火) 01:27:00
mod_rpaf はどーよ?
35名無しさん@お腹いっぱい。:2008/04/22(火) 11:23:29
アクセス制限とは違うんだけど、バックエンド側の
ログをみても分けわかめになるのはどうすればいいの?
36名無しさん@お腹いっぱい。:2008/04/22(火) 12:08:32
バックエンドがapacheなら、環境変数でもログってみるとかさ。
>>33 のモジュールだってX-Forwardから取得してるんだし。
37名無しさん@お腹いっぱい。:2008/04/22(火) 20:12:25
いや、話がややこしくなるから書かなかったんだけど
Poundを通してMediaWiki(Wikipediaのシステム)を使うと
MediaWikiに記録されるIPアドレスが全部PoundのIPアドレスになってしまうということだったのよ

ApacheのログにアクセスしたIPアドレスを記録させるには
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
こんな風にするらしいよ
38名無しさん@お腹いっぱい。:2008/04/22(火) 20:43:00
39名無しさん@お腹いっぱい。:2008/04/23(水) 08:34:11
バックエンドに lighttpd 使ってるから mod_rpaf とか聞いても
ショボーンだったけど,mod_extforward があるのを知った.
シャキーン
40名無しさん@お腹いっぱい。:2008/04/23(水) 17:09:54
X-Forwarded-Forヘッダ解釈で値を変更するってややリスキーだな。
apacheのソース見るとログは単純に文字列で、アクセス制限はソケットの構造体を見てる。
気になるのは3点。
・ログの%aや%hは上書きされるのか?
・IPアドレスベース、ホスト名ベースのアクセス制限は機能するのか?
・リバースプロキシにアクセスする際にX-Forwarded-Forを付けるとどうなるか?

mod_extract_forwarded2とかmod_rpafのソース読めばいいんだけどね。
41名無しさん@お腹いっぱい。:2008/06/20(金) 17:59:01
バックエンドにSSLを使っているサービスがあり、PoundでSSLからSSLへブリッジしたいのですが、
バックエンドのSSLはオレオレ証明書なのです。
Poundのパブリッシャ側というか、クライアント側というか、送信側は、オレオレ証明書のサービスに
対してリクエストを転送できないようですが、解決法はあるのでしょうか?

だれも、こんな使い方している人はいない?
42名無しさん@お腹いっぱい。:2008/06/20(金) 23:01:07
Pound側のOpenSSLのRootCAにオレオレのCA証明書を追加して
オレオレCA秘密鍵でバックエンド側のオレオレ証明書にサインすればいんじゃね?
43名無しさん@お腹いっぱい。:2008/06/23(月) 09:31:32
はぁ、どうもありがとうございます。
OpenSSLの仕組みに詳しくないため、かなり試行錯誤をしないと実現できない感じですが、
その方向性で試してみます。
バックエンドはIISなのです。
どうも有り難うございました。
4442:2008/06/23(月) 21:55:08
すまん,オレオレ言い過ぎた.まとめると

1) PoundサーバでCAの設定をする
2) PoundサーバでCAの証明書をRootCA(FreeBSDだと/etc/ssl以下にある.他は知らぬ)に追加
3) IISサーバでreqを作る
4) 3)のreqにPoundサーバで設定したCAの秘密鍵で署名する
5) IISで4)で署名された証明書を使うように設定する

って感じ!

45名無しさん@お腹いっぱい。:2008/06/25(水) 20:58:31
>>44
どうも有り難うございます。師匠と呼ばせて下さい。

CentOSなのですけれど、2)はFreeBSDだと可能なのでしょうか?
Linuxだと、2のやり方が分からなかったのですが。

PoundのMLを読んでいたら、stunnel使えば出来るって一言書かれていただけでした。
ということで、仕方なくstunnelを試してみました。

IISサーバにstunnelも入れてしまいましたが、上手く動きました。
経由アプリがさらに増えて、ちょっと性能的に気になりますが、
とりあえずこれでしのぐことにします。
どうも有り難うございました。
4642:2008/06/26(木) 01:06:55
>>45
> CentOSなのですけれど、2)はFreeBSDだと可能なのでしょうか?
FreeBSDってか,OpenSSLなら可能です.OS関係ナシ
CentOS上のOpenSSLがどこにRootCA置いてるかは知らぬ.
つーか,rpm -ql openssl すれば一瞬で分かるんじゃないの?

IISサーバにstunnelって時点で何したいのか意味不明になったので
師匠の話は固辞させていただきますね
47名無しさん@お腹いっぱい。:2008/06/26(木) 21:08:29
申し訳ありません、最初からまとめてみます。通常なら下記ですよね。
IIS <-(HTTP)- Pound <-(HTTPS)- 外部

でも、IIS上のアプリがSLLを使用しないと動作しないのです。
オレオレ証明書で十分なのですが、とにかくSSL必須のアプリなのです。
そのため、PoundでSSLブリッジという表現になりました。
IIS <-(HTTPS)- Pound <-(HTTPS)- 外部

最終的には、今、下記の構成で暫定対処しています。
IIS <-(HTTPS)- stunnel <-(HTTP)- Pound <-(HTTPS)- 外部

Poundだけで構成した下記の場合には、IISが呼び出せない問題が生じました。
IIS <-(HTTPS)- Pound

上記の場合、Poundはクライアントと見なせますよね。
ということは、Windowsでいうところの信頼されたルート証明書機関に
証明書を追加すればよいと思ったのですが、
OpenSSLのprivateディレクトリに証明書を置いても接続できないのです。

調べたところ、そもそもLinuxではSSLのクライアント動作に
各アプリケーション共通のルート証明書参照という仕組みがない。
それは各アプリ毎に実装される部分である。
ということでした。そこでstunnelということになったのです。
分かりにくい説明ですみません。
証明書ストアという概念は、確かにJavaだとJava用ディレクトリ決まってますよね。
OpenSSLでは、本当にライブラリ使用アプリ側で違うものなのでしょうか‥‥
4842:2008/06/30(月) 01:51:08
例えばVerisignの署名があればPoundでブリッジできるじゃないですか.
既にポインタは示したつもりだけど,技術的にVerisignの署名ならOKでオレオレCAの署名は
ダメなんてことあるわけないと思わない?

これ以上具体的に例示しろってことなら金くれ.
2万/hで売ってますんでよろしく.
49名無しさん@お腹いっぱい。:2008/06/30(月) 21:38:40
> 例えばVerisignの署名があればPoundでブリッジできるじゃないですか.

出来ない
50名無しさん@お腹いっぱい。:2008/07/01(火) 17:17:28
え?うちのイントラのVeriサイン入りサーバを外から叩くのに運用中だけど。
51名無しさん@お腹いっぱい。:2008/07/02(水) 14:18:26
Poundの場合、backendにhttpsで繋ぐ機能はないと思うが。
52名無しさん@お腹いっぱい。:2008/07/02(水) 15:12:05
つまり、ズル向けしてなきゃだめってことだな。
53名無しさん@お腹いっぱい。:2008/07/03(木) 15:15:48
イントラにベリサインってお金持ちですな。
54名無しさん@お腹いっぱい。:2008/09/12(金) 10:39:31
SSLラッパとして使ってるが、ページによってエラー302で接続できなくなる。
302ってセッショントラッキングの問題ですか?
55名無しさん@お腹いっぱい。:2008/10/20(月) 18:51:41
これってバックエンドに投げたリクエストのタイムアウトが設定できるんだけど、
正常なレスポンスが返ってこなかったときに別のサーバにリトライするように
設定できますか?
56名無しさん@お腹いっぱい。:2008/10/21(火) 01:53:34
>>55
レスポンスが例えば500番台だったら別のバックエンドへ接続するというようなこと?
接続できなかったら別のバックエンド、もしくはエマージェンシーバックエンドへ、とはできるようだけど。
57名無しさん@お腹いっぱい。:2008/10/29(水) 20:09:31
Poundを使って接続すると400番を返されて表示されない
blogのページとかで正常に見えなくなる事が多いんだけど
マニュアルも見てみたが初心者なんで何が足りないのか理解できんかった

正味ラウンドロビン機能だけできればいいんだがどーにかなりますか?
58名無しさん@お腹いっぱい。:2008/10/30(木) 00:35:58
>>57
blogなんかだとセッションがあるんじゃないの?
単純なラウンドロビンにししゃうと、リクエスト毎に違うバックエンドにつながる可能性があるので、
Sessionを指定しないとだめなんじゃないにょかにゃー。
ttp://www.apsis.ch/pound/index_html の SESSIONS
59名無しさん@お腹いっぱい。:2008/10/30(木) 21:16:31
情報足りなくてスマソ
まずはPoundからの接続検証だけ出来ればいいから違うバックエンドに繋がろうといいんだ

vhostで複数のwebを構築してるサーバのサイトに接続したいんだ
Redirectでは当然できるが
BackEndのAddressからだとデフォルトのドキュメントルートに繋がってしまう
違いって振り分けが有る無しだけじゃないのか?

poundの動きが理解できない・・・
60名無しさん@お腹いっぱい。:2008/10/30(木) 22:53:08
tcpdump とかでリクエスト確認しる Host: ヘッダ送ってないならデフォルトに繋がる罠
61名無しさん@お腹いっぱい。:2008/10/30(木) 23:44:09
>>59
「Redirectでは当然できるが」のRedirectって具体的には何のどういうリダイレクト?
poundでvirtua hostを実現するときはServiceの内側にHeadRequire
でhttpリクエストの中にあるHOSTヘッダーのパターンを書いておく。
そのパターンにマッチすれば、同じServiceのバックエンドからどれかを選んで接続(中継)する。
「BackEndのAddressから」というのもよく分からないので、もちっと具体的に書いてよ。
62名無しさん@お腹いっぱい。:2008/10/31(金) 11:12:40
>>60
情報あり、確認してみる

>>61
poundでvirtua hostを実現したいのではなくて
poundでapacheのvirtua hostに接続したいのです。

「BackEndのAddressから」っていうのは下記参照

Service
  BackEnd
    Address www.xxx.xxx
    ・・・(Portとか略)
  BackEnd
    Address 192.xx.xx.xx
    ・・・(Portとか略)
  End
End

RedirectはBackEnd項目と同レベルで記述できるpoundの内部の設定の事です

63名無しさん@お腹いっぱい。:2008/11/01(土) 00:55:25
>>62
Redirect は pound がbackendに中継するのではなく、(HTTPの)redirectを返すから
それで接続できるときはブラウザがbackendに直接接続できている、ということでしょう。

BackEndの場合
(1)ブラウザがpoundに接続しリクエストを送る
(2)poundがバックエンドに接続しリクエストを送る
(3)バックエンドからpoundにレスポンスが返る
(4)poundからブラウザにレスポンスが返る

Redirectの場合
(1)ブラウザがpoundに接続しリクエストを送る
(2)poundがレスポンス(XXXへRedirectしろよ)を返す
(3)ブラウザはXXXへ接続しリクエストを送る
(4)XXXからブラウザにレスポンスが返る

という動作になっているはずです。poundのログを見てみてはどうでしょう。
64名無しさん@お腹いっぱい。:2008/11/04(火) 16:50:19
恥ずかしながら質問してた事は解決したので報告しとく
HeadRequire にちゃんと記述したらvirtua hostに接続されました
結局は俺の勘違いでドツボにハマッテ混乱してただけなんだな・・・

>>61
申し訳ない!!
書いてた通りだ、勘違いしてました。すんませんでした!

>>63
さんくす、読解力の低い俺でも気づくことが出来たよprz


mod_rewriteを使用しているサイトにはまだ400番を返されてしまうので
どーにかならないか調べてみる
俺程度がなにか理解できれば、また書き込んでみるよ
65名無しさん@お腹いっぱい。:2009/03/25(水) 03:15:14
centOs4で試してるんですが、接続できません。
iptablesも切ってるんですが、接続自体出来てないようです。

telnetで接続すると
接続中: 192.168.11.100...ホストへ接続できませんでした。 ポート番号 80: 接続に失
敗しました
とでます。
66名無しさん@お腹いっぱい。:2009/03/25(水) 14:27:30
poundは実行されていますか?
ps ax
で見たときに pound はありますか?
67名無しさん@お腹いっぱい。:2009/06/24(水) 14:37:06
ubuntu9.04にpoundをsynapticから入れて
起動しようとしたんだけど、failになって起動せず。
設定は/etc/default/poundのフラグを1にしただけです。
特にエラーメッセージがでないので調べようがなくて
困ってます
68名無しさん@お腹いっぱい。:2009/06/24(水) 14:37:48
ubuntu9.04にpoundをsynapticから入れて
起動しようとしたんだけど、failになって起動せず。
設定は/etc/default/poundのフラグを1にしただけです。
特にエラーメッセージがでないので調べようがなくて
困ってます
69にゃあ:2009/07/11(土) 02:31:46
いまだ!69ゲットォォォォ!!! オマンコベロベロナメダーチンチンナメテー
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄    (´´
                  ∧∧       (´⌒(´
           ↑⊂(゚ー゚*)≡≡≡(´⌒;;;≡≡≡
        ⊆⊂´ ̄ ⊂ソ  (´⌒(´⌒;;
           ̄ ̄ ̄   ズザーーーーーッ
70名無しさん@お腹いっぱい。:2009/07/21(火) 12:47:33
>>68
syslog 見た?
pound.cfg の設定をしないとだめだと思うよ
71名無しさん@お腹いっぱい。:2009/07/25(土) 15:23:41
Backendサーバがpoundに返したRedirectをブラウザに中継できないか?
72名無しさん@お腹いっぱい。:2009/09/20(日) 12:27:33
枯れ過ぎ
73名無しさん@お腹いっぱい。:2009/09/27(日) 17:47:30
graceful restartマダー?
74名無しさん@お腹いっぱい。:2009/10/21(水) 21:24:56
75名無しさん@お腹いっぱい。:2009/10/21(水) 21:59:43
お、こんなスレあったのか。
全レイヤー対応のロードバランサー総合スレが欲しいな。
76名無しさん@お腹いっぱい。:2010/03/20(土) 08:01:44
Varnish 使っている人いないの?
77名無しさん@お腹いっぱい。:2010/03/20(土) 08:11:57
>>75
たてて
78名無しさん@お腹いっぱい。:2010/07/16(金) 16:47:17
時間帯や曜日によって、あるいはスケジュールに従って
バックエンドを切り替える事はできるのでしょうか?
79名無しさん@お腹いっぱい。:2012/02/02(木) 22:18:34.09
この、俺が立てたスレまだ有るのか。。。
今更だが2.6リリースおめ
80名無しさん@お腹いっぱい。:2012/03/11(日) 15:00:41.77
安定してないだろ
常にエラー吐いてるイメージなんだけど
81電脳プリオン 忍法帖【Lv=40,xxxPT】(1+0:8) 【34.6m】 :2013/12/08(日) 19:09:42.21 BE:405408285-PLT(12081)
使ったことない
82名無しさん@お腹いっぱい。
PoundとLVSどっちがいいの