問題タブ [varnish-vcl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
regex - ワニスがそれらによってキャッシュを変更しないように、選択したクエリ文字列の属性/値のペアを取り除きます
私の目標は、特定のクエリ文字列属性とその値を「ホワイトリストに登録」して、ワニスが URL 間でキャッシュを変更しないようにすることです。
例:
上記の例では、「type」ではなく「utm_code」をホワイトリストに登録したいので、最初の URL がヒットした後、ニスがそのキャッシュされたコンテンツを 2 番目の URL に提供するようにします。
ただし、3 番目の URL の場合、属性「type」の値が異なるため、varnish キャッシュ ミスになるはずです。
以下の 2 つの方法を試しましたが (現在は見つけられない drupal のヘルプ記事にあります)、うまくいきませんでした。正規表現が間違っている可能性があります。
magento - wget --mirror がワニス キャッシュを作成しない
サーバーのポート 80 にワニス キャッシュをインストールし、Apache をポート 8080 のコンテンツ サーバーとして使用しています。wget --mirror example.com を実行すると、ウェブサイト全体がクロールされ、ワニス キャッシュが作成されます。そうではありません。たとえば、wget --mirror example.com を実行すると、example.com/abc.html を実行したことが出力でわかります。しかし、ブラウザから example.com/abc.html にアクセスすると、応答ヘッダーから、Varnish MISS が返されていることがわかります (また、時間がかかります)。ただし、今度はブラウザーを介して同じ URL に再度アクセスすると、応答ヘッダーに Varnish HIT が表示されるため、キャッシュが生成されています。
もう 1 つの興味深い事実があります。wget example.com/abc.html のみを実行すると、ワニス キャッシュが作成されます。もう 1 つの興味深い事実: wget --mirror example.com/abc.html を実行すると、abc.html のワニス キャッシュが作成されますが、それ以上のページは作成されません。
したがって、何らかの理由で --mirror example.com を使用すると、最初のページのワニス キャッシュが作成されますが、それ以降のページは作成されません。
違いがあればMagentoを使用しています
私は試しました: wget --mirror --no-http-keep-alive example.com しかし、それは動作しません
ここに私のワニスvclがあります
編集、回答:
--no-cookies を追加することで修正されたかどうかはわかりません (wget --mirror が Cookie を保存するかどうか、保存されている場合は修正されるかどうかはわかりません)、またはヘッダーを追加することで修正されたかどうかはわかりませんが、これは機能し、ブラウザで見ることができるワニスキャッシュを作成します:
2番目の編集、前の回答に関連。重要
Magento を使用している人は、上記のソリューションを使用しないでください。--no-cookies のため、Magento は最終的に、単一のリクエストごとに var/session フォルダーの下に新しいセッション ファイルを作成します。これにより、上記のコマンドを wget で実行するたびに、セッション フォルダーが 250,000 個のファイルでいっぱいになりました。これにより、フォルダーがいっぱいになり、Magento が顧客用のセッション ファイルを作成できなかったため、実際に顧客は何もバスケットに追加できませんでした。私の問題に対するより多くの代替手段を探しています
varnish - 標準出力を使用して ReqEnd を出力する Varnish
VCL でstd.logを使用して ReqEndを出力することはできますか? varnishncsa ロギングで ReqEnd を使用したいと思います。
regex - 正規表現は、サブパターン以外のものと一致します
HTTPヘッダーに次のようなCookieがあります。
フロントエンドの後にある26文字の文字列を抽出する必要があります(例ovsu0p8khivgvp29samlago1q0
)。次の正規表現は私にとっての正規表現と一致します。
ただし、Varnish Cacheを使用しており、正規表現の置換のみを使用できます。したがって、そのCookie値(26文字のfrontend
文字列)を抽出するには、そのパターンに一致しないすべての文字を一致させる必要があります(したがって、それらをに置き換えることができます''
)。
私はかなりのグーグルをしましたが、これまでのところ空白を描いています。私は以下を試しました
- 必要なパターンに一致しない文字に一致します。
[^((?<=frontend=)[A-Za-z0-9]{26}(?=;))]
これは、保持したい文字を含むランダムな文字に一致します。
誰かが私を正しい方向に向けたり、どこが間違っていたのかをメモしてくれたらありがたいです。
drupal - ワニスキャッシュ-ホームページのみのキャッシュをパージ/削除する方法
Drupal7の最新の開発バージョンを使用しています。
VarnishモジュールとExpireモジュールをインストールしてセットアップしました。それらは非常にうまく機能していますが、ワニスからキャッシュを削除することに関して1つの問題があります。
問題は、インデックス(ホームページ)ページのニスキャッシュのみを削除し、他のページのキャッシュを削除しない方法です。彼のワニスログを見ると、Drupalがコマンドを実行するたびにワニスキャッシュ全体が削除されていることがわかりました
このコマンドは、varnishモジュールまたはexpireモジュールによって実行され、home(index)ページのキャッシュを削除することを意味します。しかし、私が見るように、それはニスでキャッシュされたすべてのページを削除しています。
これを修正する方法は?ホームページのキャッシュのみを削除するにはどうすればよいですか?
php - VarnishHTTPアクセラレータを使用してディレクトリの下のすべてのファイルを削除します
Varnishを使用して、特定のディレクトリの下にあるすべてのファイルを削除することはできますか?PHPスクリプトでこれを完了するにはどうすればよいですか?
たとえば、URLにパス/product/a-specific-product/
が含まれている場合、?などのファイルを削除することもできます/product/a-specific-product/a-sub-page/
か?
Varnish 3(クラスの一部:)で特定のURLを削除するために使用される次の関数がありますVarnishPurger()
。
varnish - ワニス HitPass デバッグ
私のサイトの 1 つで、私のコンテンツ ページ (Cookie を設定するべきではなく、すべて「Cache-Control: public」を max-age セットで返す必要があり、認証を必要としない) の問題に気付きました。
私の問題は、どういうわけか HitPass オブジェクトが私のキャッシュに入り、そのページからキャッシュを削除していることです。これをデバッグする必要がありますが、特に問題を再現できないため、これを行う最善の方法について混乱しています。
varnish ログの HitPass の横に varnish の ID が表示されることに気付きました。これは、HitPass を生成したリクエストのニス ID であり、ニスのログを検索すると、応答の何が問題だったのか正確にわかるでしょうか?
キャッシュしたいページから SetCookie ヘッダーを削除したほうがよいでしょうか? 問題は、URL が渡された場合でも vcl_fetch が呼び出されることです...現在の要求が vcl_recv によって渡されたかどうかを vcl_fetch で確認する方法はありますか?
varnish - Varnish で Cookie がリクエストに追加されると、beresp.ttl が 0 に設定されるのはなぜですか?
わかりましたので、Varnish を適切に動作させようとしていますが、説明できない奇妙な動作があります (理解不足が原因である可能性があります)。
これが私がやろうとしていることです:
そして私は得る:
ここで、リクエストに Cookie を追加すると、次のようになります。
キャッシュされていない応答とキャッシュ不可の警告が表示されます。
後の vcl 構成を確認するとX-Cacheable: NO:Not Cacheable
、beresp.ttl が 0 以下の場合にヘッダーが設定されます。
なんで?
また、バックエンドが必要なときにパラメーターを正しく設定する責任を負う限り、 aCookie
を返す a を持つ Request はキャッシュする必要があると想定しています。Cache-Control: public
public
Cookie を使用してリクエストを行うときに が設定されていると想定していましたX-Cacheable: NO:Got Session
が、それ以上のことはありません。
varnish デーモンを起動するコマンド ライン:
/usr/sbin/varnishd -P /var/run/varnishd.pid -a :6081 -T 192.168.1.100:6082 -f /etc/varnish/custom.vcl -S /etc/varnish/secret -s malloc,256m
これが私のcustom.vcl
varnish - Varnish は応答の HTML を評価して、キャッシュするかどうかを判断できますか?
ページのコンテンツに基づいて特定のページを Varnish キャッシュから除外したい (たとえば、フォームがセキュリティ機能である特定の非表示フィールドを使用し、ページを更新するたびに一意である必要がある場合)。
私は何十ものフォームを持っているので、それぞれの固有のページを個別にキャッシュから除外する必要はありません。
これは VCL 内で可能ですか?
cookies - バックエンド応答から特定の Cookie を削除するワニス
ニスのバックエンド応答から特定の Cookie を削除する必要があります。
私のバックエンド サーバーは、私が必要としない大量の Cookie を設定しますが、残念ながら私は制御できません。そのため、それらを削除したいと考えています。
ただし、いくつかの Cookie が必要なので、名前で Cookie を削除できるようにしたいと考えています。
たとえば、bad_cookie という名前の Cookie の名前を変更したいのですが、同時に good_cookie という名前の Cookie を保持したいとします。
特定のリクエスト Cookie の削除に関する多くのリソースを見つけましたが、バックエンド レスポンス Cookie の削除に関するリソースはありません。
これはワニスで可能ですか?