簡単なデモをした。
なんかのときに使うかもしれないので吐き出しとく。
- Reverse Proxy
- Application Server
- Error Server
の3台の構成で、
- ReverseProxy サーバに来たアクセスは、丸っと Application Server に飛ばす
- Application Server から応答が遅いときには、Error Server に飛ばす
ということを実装する。
アプリケーションサーバ上には、CGIを置いておく。
Ubuntuだったら /var/www/ 以下にでも直置き。
時間がそれほどかからないCGI(1秒で応答が帰る)
sleep1.cgi
#!/bin/sh
sleep 1
/bin/echo 'Content-type: text/html
<html>
<head><title>Sleep 1</title></head>
<body>
sleep 1
</body>
</html>'
応答が遅いCGI(10秒で応答)、要は sleep の時間を変えてるだけ。
sleep10.cgi
#!/bin/sh
sleep 10
/bin/echo 'Content-type: text/html
<html>
<head><title>Sleep 10</title></head>
<body>
sleep 10
</body>
</html>'
Reverse Proxy の apache 設定。
まずは Timeout を設定する。
Timeout 3
ぐらいにしておく。3秒以上かかったらエラーになる。
Ubuntu だったら /etc/apache2/apache2.conf あたりを修正しとく。
Reverse Proxy を使えるように、proxy モジュールを有効にする。
proxy だけじゃなく、proxy_http も有効にするのを忘れずに。
Ubuntu だと以下のコマンド。
a2enmod proxy
a2enmod proxy_http
Reverse Proxy の設定は、/etc/apache2/mods-enabled/proxy.conf あたりに追記する。
ProxyRequests Off
ProxyPass / http://(Application Server)/
ProxyPassReverse / http://(Application Server)/
ErrorDocument 502 http://(Error Server)/proxy_error.html
こう設定しておけば、
- sleep1.cgi へのアクセスは Application Server が応答
- sleep10.cgi へのアクセスは遅いので Error Server が応答
するようになる。