2

負荷分散されたAmazonAWS環境を介して、複数のTypo3WebサイトにVarnish3.0.2フロントエンドキャッシュを使用します。すべて正常に機能しますが、メソッドPOSTを使用して情報を送信するお問い合わせフォームは期待どおりに機能しません。フォームに入力して[送信]を押すと、ブラウザが進行を開始しますが、フォームに戻り、入力した情報を保持します。バックエンドPHPWebサーバーで同じことを行うと、Postに対してすべてが正常に機能します。したがって、default.vclに問題があると思います。ワニスの初心者を助けることができるワニスの専門家がここにいることを願っています。

backend default{
    .host = "10.0.0.10";
    .port = "80";
}

acl ClearCache {
    "localhost";
    "10.0.0.10";
    "10.0.0.96";
}

#acl purge {
#   "localhost";
#   "10.0.0.96";


#}
sub vcl_recv {
    if (req.http.x-forwarded-for) {
        set req.http.X-Forwarded-For =
        req.http.X-Forwarded-For + ", " + client.ip;
    } else {
        set req.http.X-Forwarded-For = client.ip;
    }

    set req.backend = default;

    if (req.request == "POST") {
        ban("req.url == " + req.url);
        set req.http.X-Test = req.url;
        return (pass);
    }

    if (req.request == "BAN") {
    if (!client.ip ~ ClearCache) {
        error 405 "Not allowed.";
    }

    # This option is to clear any cached object containing the req.url
    ban("req.url ~ "+req.url);

    # This option is to clear any cached object matches the exact req.url
    # ban("req.url == "+req.url);

    # This option is to clear any cached object containing the req.url
    # AND matching the hostname.
    # ban("req.url ~ "+req.url+" && req.http.host == "+req.http.host);

    error 200 "Cached Cleared Successfully.";
    }

    if (req.request != "GET" &&
        req.request != "HEAD" &&
        req.request != "PUT" &&
        req.request != "POST" &&
        req.request != "TRACE" &&
        req.request != "OPTIONS" &&
        req.request != "DELETE") {
        return (pipe);
    }
    if (req.request != "GET" && req.request != "HEAD") {
        return (pass);
    }
    if (req.http.Authorization || req.http.Cookie) {
        return (pass);
    }
    if(req.http.host ~ "typo3.lygie.de"){
        ##TYPO3-Backend nicht cachen
        if (req.http.cookie ~ "be_typo_user"){
            ##Inhalten löschen wenn Shift+reload gedrückt wird, aber nur bei eingeloggtem user (Backend-Cookie)
            if (req.http.Cache-Control ~ "no-cache") {
                set req.ttl = 0s;
                ban("req.url == " + req.url);
                return (pass);
            }
        }
        else{
            ##Cookies von TYPO3-Seiten löschen
            unset req.http.Cookie;
        }
    }
    return (lookup);
}

sub vcl_fetch {
    set beresp.ttl = 12h;
    set req.grace = 24h;
    if (req.url ~ "\.(jpeg|jpg|png|gif|ico|swf|js|css|txt|gz|zip|rar|bz2|tgz|tbz|html|htm|pdf|pls|torrent)$") {
            set beresp.ttl = 48h;
    }

    if (req.url ~ "/typo3") {
    }else {
        unset beresp.http.set-cookie;
    }
    return (deliver);
}
4

3 に答える 3

0

私は以前にいくつかの問題を抱えていましたreturn(pipe)。私の解決策は簡単なものでした。同じ条件で inを実行してreturn(hit_for_pass)から invcl_recvを実行するだけです。それはきれいな解決策ではありませんが、うまくいきます。return(deliver)vcl_fetch

于 2012-12-20T10:39:26.580 に答える
0

多くの場合、php を介してユーザーを追跡する必要はありません (フォームを送信した後など)。内部のデータに応じて対応する必要がない場合は、PHPSESSID Cookie をクリアしてみてください。

if (req.http.Cookie ~ "PHPSESSID"){
          remove req.http.Cookie;
}

私はワニスの初心者なので、まだマイナスの副作用について考えています

  • セッションベースの ajax を使用する場合は注意してください。
  • PHP ベースの追跡では、問題が発生する可能性があります。
  • もっとアイデアはありますか?

(トピックから外れているように見えるかもしれませんが、まったく同じ状況があり、そのように解決しました。)

于 2014-12-15T23:37:10.277 に答える
0

この投稿は古いですが、ゴールドです。このバージョンはまだ使用されています。私は同じバージョンのワニスを使用しており、POST を実行すると 503 になりました。この問題が発生した場合 (昨日と今日): 注: vcl_recv の内部 PUT/POST/DELETE の場合は return(pass) を実行し、キャッシュを無効にする必要がある場合は ban() を実行します。と

backend default{
    .host = "10.0.0.10";
    .port = "80";
    .connect_timeout = 300s;
    .first_byte_timeout = 300s;
    .between_bytes_timeout = 300s;
}

2 回目の置換の試行

return (pipe);

return (pass);

うまくいかないからです。覚えておいてください: varnishlog はあなたの親友です。

于 2015-12-29T20:11:51.663 に答える