2017-09-08 3 views
0

vcl_synthでは、修正されたエラーページを作成しようとしています。私はこれをvcl_backend_errorに移すかもしれませんが、問題は同じままであるので、それは疑問です。私はCentOS 7を使用しているので、4.1ではなく4.0へのアクセス権しか持たない。 std.file_existsは> = 4.1にのみ存在するため、これは重要です。前方互換性/後方互換性を損なう、信頼できない、テストされていないソースからのパッケージを使用することは容認できません。ワニス4にはどのような変数が設定されていますか?

503.htmlファイルが存在しない可能性のある問題を処理するには、合成出力をテストしたい場合、null/emptyがフォールバックエラーページを生成する場合は、デバッグのために、すべての出力をsyslogに投げています。これは現在の形で生産には適用されません。

サンプル:I以上により

sub vcl_synth { 
    if (resp.status == 503) { 
     set resp.http.Content-Type = "text/html; charset=utf-8"; 
     synthetic(std.fileread("/var/www/vhost/" + req.http.host + "/error/503.html")); 
     std.syslog(3, "resp.http.body: " + resp.http.body); 
     return (deliver); 
    } 
} 

は明らかにresp.http.bodyが空であることがわかりますが、ページが私のブラウザに返され、レンダリングされます。それで、もしそうなら、どの変数が合成セットをしますか?そして、それはテストすることができますか?

# journalctl -f 
... 
Sep 08 02:17:17 REDACTED_HOSTNAME varnishd[32498]: resp.http.body: 

HALP plsはvcl_synthsynthetic(...)

答えて

1

実行はresp.http.bodyを移入しません。それはちょうどランダムなヘッダー名です。 1つの可能なアプローチは、レスポンスボディを持つ「一時変数」を移入するために、次のようになります。

について
sub vcl_synth { 
    if (resp.status == 503) { 
     set resp.http.Content-Type = "text/html; charset=utf-8"; 
     set req.http.X-Synth-Body = std.fileread("/var/www/vhost/" + req.http.host + "/error/503.html"); 
     synthetic(req.http.X-Synth-Body); 
     std.syslog(3, "req.http.X-Synth-Body: " + req.http.X-Synth-Body); 
     return (deliver); 
    } 
} 
+0

あなたは私にインスピレーションを与えました。 filereadを変数として設定し、変数をテストしてnullの場合を処理します。いくつかの作業コードがあると、元の投稿を更新します。 muchas graciasseñor:) – Phil

1

信頼できないからパッケージを使用することが許されない、テストされていない、前方を破るソース /下位互換性。

ワニスはdedicated repository for 4.1です。

これらのパッケージは署名されており、4.1ブランチのみに固有であり、前方互換性と後方互換性を破るべきではありません。

また、ソフトウェアを使用しているため、本質的にすでに信頼しています。さらに、最近のセキュリティアップデートでは、リポジトリではなくEPELなどが高速になる可能性があります。

そしてVarnish 4.0は正式にEOLです。

+0

これは間違いなく最善の解決策ですが、そのような変更にはテストと検証が必要です。ありがたいことに私は私の問題を短期間で解決する方法があると思います。プラットフォームが完全にサポートされている場合は、作成者のリポジトリが確実に行かなければなりません。サードパーティのrepos、一般的にそうではありません.. :) – Phil

関連する問題