8080でApacheを実行し、80でVarnishを実行するUbuntu9.04ボックス。
最近Muninをセットアップし、Apacheグラフが空である理由を疑問に思いました。 Muninが/server-status?auto
にアクセスし、403 Forbidden
を取り戻していることをログから確認しました。そこで、/etc/Apache2/monds-enabled/status.conf
を編集して127.0.0.1
からのアクセスを許可しました。しかし、これを行うと、実際には/server-status
が公開されます。これは、Varnishを介して送信される要求も127.0.0.1
から送信されるように見えるためです。
だから問題は、Varnishではなくmod_status
だけがアクセスできるようにmunin-node
を設定するにはどうすればよいですか?
私がこれに対処する方法は、リクエストがワニスキャッシュを通過する場合でも、Apacheが実際の訪問者のIPを取得するようにすることです。そのためにApachemod_rpafを使用します( http://giantdorks.org/alain/easily-get-the-correct-client-ip-with-mod_rpaf/ を参照)。
また、クライアントのリクエストがX-Forwarded-Forヘッダーを設定するプロキシを通過した場合に備えて、ワニスキャッシュインスタンス(vcl_recv内)でリセットします。
remove req.http.X-Forwarded-For;
set req.http.X-Forwarded-For = client.ip;
次に、/ server-statusと/ server-infoの応答をキャッシュしないようにvarnishに指示します。以下(vcl_recvでも)は私のために働きます:
if (req.url ~ "server-(info|status)") {
return (pass);
}
これは解決策のように見えます、あなたの考えを教えてください。
Varnishは、バックエンドに送信するすべてのリクエストにX-Varnish
などのHTTPヘッダーを追加します。これらをApache構成で使用して、Varnishからの要求を認識することができます。
/etc/Apache2/mods-enabled/status.conf
:
<IfModule mod_status.c>
SetEnvIf X-Varnish ".+" from_varnish
ExtendedStatus On
<Location /server-status>
SetHandler server-status
Order allow,deny
Deny from env=from_varnish
Allow from localhost ip6-localhost 127.0.0.1
</Location>
</IfModule>
次に、muninに80ではなくポート8080を監視するように指示します。munin-node
からのリクエストは直接送信されるため、X-Varnish
ヘッダーは設定されません。
/etc/munin/plugin-conf.d/munin-node
に追加:
[Apache_*]
env.url http://127.0.0.1:%d/server-status?auto
env.ports 8080
Ubuntu 12.04、ポート8008のApache2、ポート80のVarnishでも同じ状況でした。VarnishVCLを使用していたサーバーのステータスページは1時間キャッシュされていたため、引き続き使用できましたが、キャッシュ時にステータスレポートのみが提供されました。リフレッシュしました。 Alainのソリューションを実装すると、Varnishがバックエンドに渡したときにライブサーバーステータスを利用できるようになりました。サーバーステータスを保護するために、次のことを行いました。
/etc/munin/plugin-conf.d/munin-nodeの8008でリッスンするようにmunin-nodeを構成しました。
[Apache_*]
env.url http://127.0.0.1:%d/server-status?auto
env.ports 8008
次に、vcl_recvセクションの上部にあるVCLに次の行を追加しました。
if (req.url ~ "^/server-status") {
error 403;
}
これにより、ポート80のサーバーステータスURLへのアクセスが403禁止メッセージでブロックされますが、munin-nodeは引き続きlocalhost:8008のサーバーステータスに接続できます。
この投稿は役に立ちました: http://nwlinux.com/how-to-configure-varnish-on-ubuntu-server/