0

初めてワニスを設定していますが、これまで完全な答えを見つけることができなかった問題に遭遇しました。

一言で言えば私の設定:

server0 - ワニス、be1 - Apache、be2 - Apache

varnish は 2 つのバックエンドからラウンド ロビンでプルします。

セッションを処理する必要があるため、現在の時刻をセッション変数に設定し、そのセッション変数と使用されたバックエンドの IP を表示する 2 番目のページにリダイレクトする単純な php スクリプトを構成しました。

私はこの半分を機能させることができました。私が見ることができるセッション情報を渡していますが、ここに問題があります-バックエンドから返された情報は、それが生成されたバックエンドに固有です。そのため、返される時間は、最後のキャッシュに対して be1 または be2 が呼び出されたかどうかによって異なります。

セッション変数を処理するバックエンドに関係なくセッション変数が同じになるように、これを機能させる方法はありますか?

4

1 に答える 1

6

これはセッションの一般的な問題です。Cookie (リクエストごとに送信される) には、セッションの識別子が含まれています。実際のセッション データは、サーバーまたはデータベースに保存されます。これにはいくつかの解決策があります。

  1. スティッキー セッション。追加の Cookie 変数 (be=1 または be=2 など) を設定するか、セッション ID がバックエンド 1 または 2 に属することを認識できるようにします。Varnish は、リクエストがどのバックエンド サーバーに送信されるかを決定できます。バックエンドがダウンすると、セッションが失われます (「セッション フェイルオーバー」はありません)。
  2. データベース、memcached、またはすべてのバックエンドで共有されるその他のデータストアにセッション データを保存します。
  3. セッションを使用しないで、Cookie 内のすべてのデータをシリアル化します。クライアントは信頼できないため (Cookie はクライアントによって変更される可能性があります)、データが改ざんされていないことを確認してください (データに署名するなど)。

コードに適用できるライブラリ/再利用可能なコードを探してください。頑張ってください!

于 2011-07-20T21:01:13.297 に答える