web-dev-qa-db-ja.com

Apacheのmod_statusがVarnishによって公開されないようにする

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を設定するにはどうすればよいですか?

2
Pēteris Caune

私がこれに対処する方法は、リクエストがワニスキャッシュを通過する場合でも、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);
  }
3
Alain Kelder

これは解決策のように見えます、あなたの考えを教えてください。

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
1
Pēteris Caune

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/

0
mixedbredie