|
新しい情報が SYの技術情報備忘録 の リバースプロキシ & ロードバランサ − Pound にあります。
最近、Webブラウザから設定できる機器やソフトが増えてきて、便利にはなっているんだけど、sshやtelnetで接続してCLI(Command
Line Interface)でも設定できるようになっていないとやはり不便ですね。
ある機器の設定を変更したいのですが、その機器はサーバの裏側に接続されており、こちら側から直接アクセスできません。おまけに、Webブラウザからの設定しかサポートしていないし、アクセス制限もかけてあります。また、サーバにはWebブラウザなんて入れていないし、入れるつもりもありません(そもそも、X
Windowも入れてないし)。
そこで、リモートで機器の設定を行うために、サーバでリバースプロキシ(reverse-proxy)を動かす事にしました。何か良いソフトはないかと探していたら、Pound を見つけました(Squid や Apache でもできるみたいですが)。
リバースプロキシ & ロードバランサ(reverse-proxy and load-balancer)で、
などの機能があります。
サイズも小さく、設定も簡単です。
$ tar zxf Pound-0.11.tgz
$ cd $POUND $ diff http.c.orig http.c 391c391 < SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE, verify_cert); --- > SSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, verify_cert);
$ cd $POUND $ ./configure -with-ssl=/usr/local/ssl <- OpenSSLのインストール先 $ make # make install <- 当然、rootですよ
Pound は、パスワード無しの秘密鍵とサーバ証明書を同じファイルに入れておく必要があります。証明書発行機関からのグローバルな証明書の入手も考えられますが、ここではローカル証明書を使用(作成)します。
$ openssl genrsa -rand /var/log/syslog -des3 -out server.key 1024
$ openssl rsa -in server.key -out server-np.key
$ openssl req -new -key server-np.key -x509 -out server.pem
$ cat server-np.key >> server.pem
以上で証明書の作成完了です。適当な場所に証明書を置いて下さい。
設定ファイル
/usr/local/etc/pound/pound.cfg
を作成します。
詳細の設定情報は、マニュアルを参照して下さい。
ListenHTTP 1.2.3.4,80 UrlGroup ".*" BackEnd 192.168.0.10,80,1 EndGroup
ListenHTTPS 1.2.3.4,443 /usr/local/etc/pound/server.pem UrlGroup ".*" BackEnd 192.168.0.10,80,1 EndGroup
ListenHTTPS 1.2.3.4,443 /usr/local/etc/pound/server.pem UrlGroup ".*" BackEnd 192.168.0.10,80,1 BackEnd 192.168.0.20,80,1 BackEnd 192.168.0.30,80,5 EndGroup
・画像ファイル(*.jpg, *.gif)へのリクエストは、192.168.0.10 にそれぞれ振り分ける。
・バーチャルホスト www.server0.jp へのリクエストは、192.168.0.10 と 192.168.0.20 に
・バーチャルホスト www.server1.jp へのリクエストは、192.168.0.10:50080 と 192.168.0.20:50081 に
・その他のリクエストは、192.168.0.30 と 192.168.0.40 に
ListenHTTP 1.2.3.4,80 UrlGroup ".*.(jpg|gif)" BackEnd 192.168.0.10,80,1 EndGroup UrlGroup ".*" HeadRequire Host ".*www.server0.jp.*" BackEnd 192.168.0.10,80,1 BackEnd 192.168.0.20,80,1 EndGroup UrlGroup ".*" HeadRequire Host ".*www.server1.jp.*" BackEnd 192.168.0.10,50080,1 BackEnd 192.168.0.20,50081,1 EndGroup UrlGroup ".*" BackEnd 192.168.0.30,80,1 BackEnd 192.168.0.40,80,1 EndGroup
おまけに、Squid でのリバースプロキシの設定例です。多機能なだけに設定項目も沢山あるので、関連する部分のみです。
redirect_program /usr/local/squid/etc/redirector.pl httpd_accel_host virtual httpd_accel_port 80 httpd_accel_with_proxy on httpd_accel_uses_host_header on
#!/usr/local/bin/perl $|=1; while (<>) { s@http://1\.2\.3\.4@http://192.168.0.10@; print; }