2

すべてのリクエストでApacheから返される「サーバー」ヘッダーをVarnishから隠そうとしています。

サブ vcl_fetch での使用:

unset obj.http.Server;

ワニスの開始時に次のようになります:

Expected action, 'if' or '}'
(/etc/varnish/default.vcl Line 43 Pos 9)
    unset obj.http.Server;
--------#####-----------------

何か案は?

4

4 に答える 4

2

最近のバージョン(2.1シリーズ)では、応答オブジェクトはberespと呼ばれ、vcl_fetchでこのようなものが機能ます(Varnish 2.1.0でテストしたばかりです)。

unset beresp.http.Server;

使用しているバージョン(1.1.2)をインストールしたところ、あなたが言及したのとまったく同じ動作が得られました。unsetキーワードは、少なくともvcl_fetch関数では機能しないように見えます。私が見つけた少なくとも1つの例が、その正確な目的のためにunsetを使用することに言及しているので、これは奇妙です。

可能であれば、最新のワニスにアップグレードすることをお勧めします。観察した未設定の動作がバグである場合、チームが喜んで修正する可能性は低いと思います。

それを除けば、サーバーを別の設定に設定してみてください。

set obj.http.Server = "";
set obj.http.Server = "BogoServer Whatever"; 

あなたの目的がサーバーの署名を隠すことであると仮定します。ヘッダーを完全に削除したい場合は、お使いのバージョンのVarnishでは実行できないと思います。

于 2010-05-20T00:01:28.490 に答える
1

これまでの最新バージョンであるVarnish2.1.2をインストールすることにしました。構文エラーは発生しなくなりましたが、目的の効果が適用されません。この弾力性のあるヘッダーはまだあります。

sub vcl_fetch {
    unset beresp.http.Server;
    set beresp.http.Server = "Apache";
}

Firebugを使用してヘッダーを確認します。これが表示されます。

Server  Apache/2.2.9 (Debian)

設定を解除するだけで設定しないなど、いくつかのバリエーションを試しましたが、何も機能しません。

それは論理の問題でしょうか?たぶん、未設定のものを別のサブに配置する必要があります。vcl_missとvcl_deliverの両方に配置してみました。どちらの場合も、「Variable'beresp.http.Server' notaccessableinmethod..」を取得しました。

また、カスタムヘッダーを設定して削除してみました。それもうまくいきませんでした。

于 2010-05-27T20:13:55.213 に答える
1

Varnish 1.1.2も使用しています。berespでもテストしましたが、同じエラーが発生します。

未設定で何かがおかしいようです。完全なフェッチは次のとおりです。

sub vcl_fetch {
    unset obj.http.Server;
    # force minimum ttl of 6 hours
    if (obj.ttl < 6h) {
            set obj.ttl = 6h;
    }
}
于 2010-05-20T14:16:09.997 に答える
1

最終的に修正しました。

vcl_recv に return(pipe) があり、ヘッダーを設定解除していたところにニスが vcl_fetch に入ることはありませんでした。

于 2010-05-31T21:46:45.453 に答える