うまくいけば、私はあなたの質問を正しく理解しました。PHPSESSID が 503 エラーの処理にどのように関連しているかはよくわかりませんが、リクエストを再試行するために Cookie を使用する必要はまったくありません。
Varnish で再起動を使用して、やろうとしていることを達成できます。たとえば、リクエストを 2 回試行するには、次のようにします。
sub vcl_error {
if (obj.status == 503 && req.restarts < 2) {
return (restart);
}
}
これにより、Cookie に触れることなく、探している機能が提供されるはずです。
これは明らかですが、とにかく言います。本当にすべきことは、503 エラーの原因を突き止めることです。バックエンドから送信されていない場合は、タイムアウトまたは Varnish 構成の問題が原因です。「TxStatus c 503」行の Varnish ログを監視し、リクエストで何が起こっているかを確認してください。
503 エラーの考えられる原因に関する更新:
どうやら、POST リクエスト (ユーザーがログインしようとしたとき) で 503 エラーを受け取っているようです。これは、投稿が低速リンクで行われた場合、または POST 本文が完全に転送される前に何らかの理由でクライアントによって接続が終了された場合に発生する可能性があります。ただし、これはno error recorded
varnishlog のようには表示されません。問題が解決するかどうかを確認するために、いずれにしても次のことを試してみてください。
Varnish はデフォルトで POST リクエストに対して return(pass) を返しますが、これはすべての場合で期待どおりに機能しません (詳細については、Varnish チケット #849を参照してください)。
すべての POST リクエストをパイプし、X-Forwarded-For をリクエストに追加することも選択しました。関連する VCL は次のとおりです。
# PIPE all POST requests
sub vcl_recv {
if (req.request == "POST") {
return (pipe);
}
}
# Set XFF for piped requests
sub vcl_pipe {
set bereq.http.Connection = "close";
set bereq.http.X-Forwarded-For = req.http.X-Forwarded-For;
if (bereq.http.x-forwarded-for) {
set bereq.http.X-Forwarded-For = bereq.http.X-Forwarded-For + ", " + client.ip;
} else {
set bereq.http.X-Forwarded-For = client.ip;
}
return (pipe);
}