0

いくつかのソースからのトラフィックが急増しているサイトがあります。このサイトは、ユーザーが PHP $_SERVER["HTTP_REFERER"] を使用してサイトに到着したかどうかを推測して、ユーザーにコンテンツを表示できる必要もあります。

req.http.referer の値をワニスキャッシュに含めて、この動作がより個々のユーザーベースになるようにすることは可能ですか? 別のユーザーが別のリファラー値でコンテンツをキャッシュしているために、一部のユーザーに間違ったコンテンツが表示されていると思います。

4

2 に答える 2

5

可能なすべてのリファラーでキャッシュを異なるものにしたい場合は、http プロトコルの Vary-header が解決策です。トラフィックが非常に少数の一意の URL からのリファラーで非常に均一でない場合、キャッシュ ヒット率が事実上失われます。

私がより良い解決策だと思うのは、誰が新しいユーザーであるかを推測するロジックをphpレイヤーから削除し、それをワニスに追加することです。これは、vcl_recv でリクエストにカスタム ヘッダーを設定し、そのヘッダーを使用して vcl_recv に次のようなものを追加して vcl_hash でハッシュすることで実行できます。

if ((req.http.referer ~ "www.newuserhost1.com" || req.http.referer ~ "www.newuserhost2.com") &&
    req.url == "/") {
       req.http.X-New-User = 1;
}

これを vcl_hash に追加します

 hash_data(req.http.X-New-User);

ユーザーがバックエンドに到達すると、リファラーの代わりにそこから X-New-User の値を確認できます。

于 2012-12-05T16:52:11.893 に答える
1

HTTP 仕様には、これに対する解決策があります。Vary 応答ヘッダーは、コンテンツの作成時にどの要求ヘッダーが考慮されたかを示します。

"Vary: Referer" ヘッダーをバックエンド レスポンスに追加すると、Varnish は各クライアントに正しいバリアントを提供します。

于 2012-12-05T12:35:38.193 に答える