2011年10月1期UNIXリバースプロキシPound TOP カテ一覧 スレ一覧 削除依頼
・ 次のスレ
UNIX@仮想化技術
pthread地獄 part 2
【本スレ保護用】2ch閉鎖対策 総合雑談・議論スレ
/**軽くて多機能--XFceスレ**/


リバースプロキシPound


1 :06/12/30 〜 最終レス :10/07/16
速い、安定、簡単と三拍子そろった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 :
おまけ: 俺が適当に書いた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 :
終了

4 :
続き
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 :

おわり
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 :
適当に書いたことにしたいのだろうけど、本当はどこからパクった?

7 :

あーすんません。
「適当」ってのは、パクって適当に改変したって意味です。
元になったのは、確かucd-snmpとかいうやつです。

8 :
Poundをロードバランスするにはどうすんの?
なにか箱を前に入れるの?

9 :
大規模なWebサイトでない限り、いまのところ
Pound自体をロードバランスする必要はないと思いますが、
どうですかね。
自分は、最大同時コネクション数が2 300のWebアプリでPoundを使ってますが、
Pentium2 450MHz x 2というヘボスペックでも、
Poundの負荷が問題になったことはないです。
ただ、poundは全てのログをsyslogに吐くので、
syslogが遅いと、それに引きずられるかもしれないですが。
冗長性を持たせるのが目的なら、LVSとかですかね。

10 :
書き込みねーな。誰も使ってないのか?
俺はスゲー便利だと思うけどな。

11 :
Poundだけじゃなく、Squid、
Apacheモジュールタイプ、WASやOASについてくるやつ、
はたまた、ServerIronのようなハードウェアタイプなどなど。
わかりやすく比較している記事とかないかなぁ。

12 :
軽く探してみたけど、こんなのしか見つかんかった。
ttp://kevinminnick.blogspot.com/2006/03/my-evaluation-of-reverse-proxy.html

13 :
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 として動作する
ようになったのですが、みなさんのお手元ではこういう問題は発生していないですかね?

14 :
自己レスですが、pound 2.2 だと問題ないですね。
昨日はどういうわけか http://www.apsis.ch/pound/ にアクセスできなかったので
確認を怠ってしまったのですが deb 化されている 2.0 って最新版じゃなかったのね orz

15 :
バイナリパッケージにはよくあること

16 :
>>14
多分関係ないと思うが、
昔、poundでOpenSSH関連の意味不明なエラーが出て困ったことがあった。
詳細な理由は不明だが、どうやら「rootじゃないアカウントでpoundをビルドしたこと」が
原因だったようだ。それ以来rootでmakeするようにしている。

17 :
rootでビルドしないと使えないソフトってなんだか怪しいなあ

18 :
なんで?危なくないよ

19 :
2chを読むことは出来るけど
書くことが出来ないようにできる?

20 :
リバースプロキシなんですけど。

21 :
>>19
ここは君の来るところではない。
Windows板の初心者スレあたりで質問してきなさい。

22 :
2.2 にあった NO_SYSLOG のマクロ定義が 2.3 でなくなってしまったのは何故なんでしょうか。
CHANGELOG 眺めてもわからない… configure --disable-log が有効にならないみたいなんですけど。

23 :
手動で消せばいいじゃねーか
ソース短いんだし

24 :
うぉ.
Pound最高.
Cookieのぞいてセッション見てくれる.

25 :
なんという過疎っぷり…
こんなに便利なのになぁ

26 :
>>25
完成度が高過ぎて話すネタがないのかも知れませんね、って1ヶ月後に書くのもなんですが。

27 :
バックエンドを変更したときなど,
あるいはバックエンドの一部を落としたい時など,
設定ファイルを読み直させるにはどうすればいいんでしょうか?
kill -HUP <pid> ?

28 :
バックエンドを落とすだけなら
poundctl
でなんとかなりそうじゃない?

29 :
>>28
ごめん、不十分な説明だった。
バックエンドを落として、別のに切り替えたいときがあって。
まぁ新しいバックエンドを同じIPアドレスにすればいいのかも試練が。
それにしても堅牢だわ、pound。SSLオフロードもできるし。
商用のSSLオフロードバランサが商売になるのってどれくらいの
サイト規模なんだろうねぇ。

30 :
>>29
大人になって誰かに責任をなすりつけられることの意味を知ったら小規模サイトでも使うよ
というのは冗談として,運用担当グループがスキル的にpoundの設定変更を任せられる
レベルじゃない場合は箱物を選択するんじゃない?
いつもBIG-IPとServerIronとArrayとPoundを並列に提案して客に選ばせるんだけど,
日本ではBIG-IP以外の選択を受けたことないよ.アメリカだとたまにArrayやPoundを
選択してもらえる時がある.

31 :
BIG-IPだと400万円とか一桁違うだろ。みんな金持ってるなあ。
まあ人件費よりは安いか…
てかエロサイト?

32 :
WASとかOracleなんかを使ってれば、付属のキャッシュサーバが使えたりするし、
BIG-IPやらServerIronあたりのメジャーなやつと連携が取れるようになっていたりもする。

33 :
Pound使ってるとApacheにPoundのIPアドレスが渡ってしまうから
アクセス制限かけられねーよ…と思っていたら
mod_extract_forwarded2
なるものがあるのね
debian用パッケージはないのね

34 :
mod_rpaf はどーよ?

35 :
アクセス制限とは違うんだけど、バックエンド側の
ログをみても分けわかめになるのはどうすればいいの?

36 :
バックエンドがapacheなら、環境変数でもログってみるとかさ。
>>33 のモジュールだってX-Forwardから取得してるんだし。

37 :
いや、話がややこしくなるから書かなかったんだけど
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 :
>>37
>>34

39 :
バックエンドに lighttpd 使ってるから mod_rpaf とか聞いても
ショボーンだったけど,mod_extforward があるのを知った.
シャキーン

40 :
X-Forwarded-Forヘッダ解釈で値を変更するってややリスキーだな。
apacheのソース見るとログは単純に文字列で、アクセス制限はソケットの構造体を見てる。
気になるのは3点。
・ログの%aや%hは上書きされるのか?
・IPアドレスベース、ホスト名ベースのアクセス制限は機能するのか?
・リバースプロキシにアクセスする際にX-Forwarded-Forを付けるとどうなるか?
mod_extract_forwarded2とかmod_rpafのソース読めばいいんだけどね。

41 :
バックエンドにSSLを使っているサービスがあり、PoundでSSLからSSLへブリッジしたいのですが、
バックエンドのSSLはオレオレ証明書なのです。
Poundのパブリッシャ側というか、クライアント側というか、送信側は、オレオレ証明書のサービスに
対してリクエストを転送できないようですが、解決法はあるのでしょうか?
だれも、こんな使い方している人はいない?

42 :
Pound側のOpenSSLのRootCAにオレオレのCA証明書を追加して
オレオレCA秘密鍵でバックエンド側のオレオレ証明書にサインすればいんじゃね?

43 :
はぁ、どうもありがとうございます。
OpenSSLの仕組みに詳しくないため、かなり試行錯誤をしないと実現できない感じですが、
その方向性で試してみます。
バックエンドはIISなのです。
どうも有り難うございました。

44 :
すまん,オレオレ言い過ぎた.まとめると
1) PoundサーバでCAの設定をする
2) PoundサーバでCAの証明書をRootCA(FreeBSDだと/etc/ssl以下にある.他は知らぬ)に追加
3) IISサーバでreqを作る
4) 3)のreqにPoundサーバで設定したCAの秘密鍵で署名する
5) IISで4)で署名された証明書を使うように設定する
って感じ!

45 :
>>44
どうも有り難うございます。師匠と呼ばせて下さい。
CentOSなのですけれど、2)はFreeBSDだと可能なのでしょうか?
Linuxだと、2のやり方が分からなかったのですが。
PoundのMLを読んでいたら、stunnel使えば出来るって一言書かれていただけでした。
ということで、仕方なくstunnelを試してみました。
IISサーバにstunnelも入れてしまいましたが、上手く動きました。
経由アプリがさらに増えて、ちょっと性能的に気になりますが、
とりあえずこれでしのぐことにします。
どうも有り難うございました。

46 :
>>45
> CentOSなのですけれど、2)はFreeBSDだと可能なのでしょうか?
FreeBSDってか,OpenSSLなら可能です.OS関係ナシ
CentOS上のOpenSSLがどこにRootCA置いてるかは知らぬ.
つーか,rpm -ql openssl すれば一瞬で分かるんじゃないの?
IISサーバにstunnelって時点で何したいのか意味不明になったので
師匠の話は固辞させていただきますね

47 :
申し訳ありません、最初からまとめてみます。通常なら下記ですよね。
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では、本当にライブラリ使用アプリ側で違うものなのでしょうか‥‥

48 :
例えばVerisignの署名があればPoundでブリッジできるじゃないですか.
既にポインタは示したつもりだけど,技術的にVerisignの署名ならOKでオレオレCAの署名は
ダメなんてことあるわけないと思わない?
これ以上具体的に例示しろってことなら金くれ.
2万/hで売ってますんでよろしく.

49 :
> 例えばVerisignの署名があればPoundでブリッジできるじゃないですか.
出来ない

50 :
え?うちのイントラのVeriサイン入りサーバを外から叩くのに運用中だけど。

51 :
Poundの場合、backendにhttpsで繋ぐ機能はないと思うが。

52 :
つまり、ズル向けしてなきゃだめってことだな。

53 :
イントラにベリサインってお金持ちですな。

54 :
SSLラッパとして使ってるが、ページによってエラー302で接続できなくなる。
302ってセッショントラッキングの問題ですか?

55 :
これってバックエンドに投げたリクエストのタイムアウトが設定できるんだけど、
正常なレスポンスが返ってこなかったときに別のサーバにリトライするように
設定できますか?

56 :
>>55
レスポンスが例えば500番台だったら別のバックエンドへ接続するというようなこと?
接続できなかったら別のバックエンド、もしくはエマージェンシーバックエンドへ、とはできるようだけど。

57 :
Poundを使って接続すると400番を返されて表示されない
blogのページとかで正常に見えなくなる事が多いんだけど
マニュアルも見てみたが初心者なんで何が足りないのか理解できんかった
正味ラウンドロビン機能だけできればいいんだがどーにかなりますか?

58 :
>>57
blogなんかだとセッションがあるんじゃないの?
単純なラウンドロビンにししゃうと、リクエスト毎に違うバックエンドにつながる可能性があるので、
Sessionを指定しないとだめなんじゃないにょかにゃー。
ttp://www.apsis.ch/pound/index_html の SESSIONS

59 :
情報足りなくてスマソ
まずはPoundからの接続検証だけ出来ればいいから違うバックエンドに繋がろうといいんだ
vhostで複数のwebを構築してるサーバのサイトに接続したいんだ
Redirectでは当然できるが
BackEndのAddressからだとデフォルトのドキュメントルートに繋がってしまう
違いって振り分けが有る無しだけじゃないのか?
poundの動きが理解できない・・・

60 :
tcpdump とかでリクエスト確認しる Host: ヘッダ送ってないならデフォルトに繋がる罠

61 :
>>59
「Redirectでは当然できるが」のRedirectって具体的には何のどういうリダイレクト?
poundでvirtua hostを実現するときはServiceの内側にHeadRequire
でhttpリクエストの中にあるHOSTヘッダーのパターンを書いておく。
そのパターンにマッチすれば、同じServiceのバックエンドからどれかを選んで接続(中継)する。
「BackEndのAddressから」というのもよく分からないので、もちっと具体的に書いてよ。

62 :
>>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 :
>>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 :
恥ずかしながら質問してた事は解決したので報告しとく
HeadRequire にちゃんと記述したらvirtua hostに接続されました
結局は俺の勘違いでドツボにハマッテ混乱してただけなんだな・・・
>>61
申し訳ない!!
書いてた通りだ、勘違いしてました。すんませんでした!
>>63
さんくす、読解力の低い俺でも気づくことが出来たよprz
mod_rewriteを使用しているサイトにはまだ400番を返されてしまうので
どーにかならないか調べてみる
俺程度がなにか理解できれば、また書き込んでみるよ

65 :
centOs4で試してるんですが、接続できません。
iptablesも切ってるんですが、接続自体出来てないようです。
telnetで接続すると
接続中: 192.168.11.100...ホストへ接続できませんでした。 ポート番号 80: 接続に失
敗しました
とでます。

66 :
poundは実行されていますか?
ps ax
で見たときに pound はありますか?

67 :
ubuntu9.04にpoundをsynapticから入れて
起動しようとしたんだけど、failになって起動せず。
設定は/etc/default/poundのフラグを1にしただけです。
特にエラーメッセージがでないので調べようがなくて
困ってます

68 :
ubuntu9.04にpoundをsynapticから入れて
起動しようとしたんだけど、failになって起動せず。
設定は/etc/default/poundのフラグを1にしただけです。
特にエラーメッセージがでないので調べようがなくて
困ってます

69 :
いまだ!69ゲットォォォォ!!! オベロベロナメダーチンチンナメテー
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄    (´´
                  ∧∧       (´⌒(´
           ↑⊂(゚ー゚*)≡≡≡(´⌒;;;≡≡≡
        ⊆⊂´ ̄ ⊂ソ  (´⌒(´⌒;;
           ̄ ̄ ̄   ズザーーーーーッ

70 :
>>68
syslog 見た?
pound.cfg の設定をしないとだめだと思うよ

71 :
Backendサーバがpoundに返したRedirectをブラウザに中継できないか?

72 :
枯れ過ぎ

73 :
graceful restartマダー?

74 :
http://blogwatcher.pi.titech.ac.jp/nandemorss/index.cgi?url=http%3A%2F%2Fpc12.2ch.net%2Ftest%2Fread.cgi%2Funix%2F1167472480%2F

75 :
お、こんなスレあったのか。
全レイヤー対応のロードバランサー総合スレが欲しいな。

76 :
Varnish 使っている人いないの?

77 :
>>75
たてて

78 :10/07/16
時間帯や曜日によって、あるいはスケジュールに従って
バックエンドを切り替える事はできるのでしょうか?
TOP カテ一覧 スレ一覧 削除依頼
・ 次のスレ
UNIX@仮想化技術
pthread地獄 part 2
【本スレ保護用】2ch閉鎖対策 総合雑談・議論スレ
/**軽くて多機能--XFceスレ**/