よくある503エラー
最終更新日 2022-12-07
Fastly CDN のエンジン、Varnish が標準的な 503 レスポンスを返すことがあります。これは、オリジンサーバーからデータを取得する際に起こる様々な問題により発生します。503エラーに対する汎用的ステータステキストは「Service Unavailable」です。この場合、様々な理由が考えられます。よくある理由は以下の通りです。
- オリジンで503エラーが発生し、それを Fastly はそのまま返している。
- オリジンがレスポンスヘッダーなしで503エラーを返したため、デフォルトのレスポンスが使用された。
- オリジンからの HTTP レスポンスのステータス行を読み取ることができなかった。
- 適切なレスポンスステータスのない「エラー」ステートメントを使った VCL コードが実行された (例 :
error 503
ではなくerror 503 "broken thing"
)。
下記ではよく見られる、標準的だが非汎用的な503レスポンスについて説明します。
警告
503エラーが発生した場合、キャッシュされたコンテンツに対してすべてパージを実行しないでください。全コンテンツのパージを行うとstale-if-errorが機能しなくなるため、オリジンサーバーへのリクエスト数が増加します。その結果、503エラーがさらに増える可能性があります。
Timeout errors
以下は、発生する可能性がある一般的なタイムアウトエラーを示しています。
Error 503 backend read error
Backend read error (バックエンド読み取りエラー) はたいてい、コンテンツをキャッシュする際のバックエンドのタイムアウトエラーに伴い発生します。また、Fastly のキャッシュサーバーがオリジンからコンテンツを取得しようとした際のネットワークエラー (例:ルーターのフェイルオーバー、パケットロス) やオリジンの過負荷によっても発生します。
バックエンドのレスポンスタイムをベンチマークする。 バックエンドのレスポンスタイムは様々な外的要因により変化します。Backend read error が頻繁に、または継続的に発生する場合には、Fastly コントロールパネルの backend timeout 設定の変更によりエラーの発生を防ぐことができます。次のコマンドを実行することで、ベンチマーク用途に適切なレスポンスタイムを測定することができます。
$ curl -s -w "%{time_total}\n" -o /dev/null http://example.com/path/to/file
バックエンドのタイムアウト設定をより大きな値にする。 アプリケーション内の遅い箇所に対するベンチマークを実施すると、バックエンドからの適切なレスポンスタイムが分かります。Edit this host 設定画面の Advanced options より、バックエンドのタイムアウト値を調整してください。また、オリジンの手前にロードバランサーやファイアウォール等のインターフェイスが設置されている場合、そのタイムアウト値も確認すべきです。
Error 503 connection timed out
Connection timed out (接続タイムアウト) は、Fastly からオリジンへの TCP 接続の確立待ち、または、オリジンからのレスポンス待ちでのタイムアウトにより発生します。Backend read error 同様、接続タイムアウトは一時的なネットワーク上の問題やオリジンの遅延、オリジンまでの距離が大きいこと等を原因として発生します。これらタイムアウトエラーの予防に有効な方法が2つあります。
- Fastly ホストにおける接続タイムアウト値を大きくしてください。
- オリジンシールドを有効にします。オリジンシールド有効化には以下2つの利点があります。
- 接続の確立に必要な距離を短くすることができます。
- 複数 POP の利用により生じる TCP ハンドシェイクの頻度を減らすことができます。結果的に、オリジンのパフォーマンス低下を防ぐとともに、オリジンは少数の接続を維持すれば十分となります。
注意
Fastlyでは、 で リクエストを渡さない限り、ノード間で60秒間のタイムアウトが強制されますvcl_recv
。
Error 503 backend write error
Backend write error (バックエンド書き込みエラー) は、Backend Read Error に類似していますが、POST リクエストを Fastly からバックエンドに送信する際に発生します。このエラーは backend read error と同じ方法で解決できます。
Error 503 client read error
Client read error (クライアント読み取りエラー) は、クライアントと Fastly 間のネットワーク上の問題により発生します。また、ユーザーがページの読み込みを中断した場合 (例: ページの読み込みが遅いためにユーザーがブラウザの中断ボタンをクリックする) にも発生します。Backend read error に類似していますが、クライアントからのリクエストを読み取る際に起こります。このエラーが起きた場合は、ネットワーク上の問題を特定するために Fastly サポートにご連絡ください。
Error 503 backend fetch failed
Backend fetch failed エラーは、Fastly のキャッシュサーバーがレスポンスの読み込みを完了する前にコネクションがクローズした場合に発生します。このエラーは、レスポンスに Content-Length
ヘッダーがない場合やヘッダーが無効な場合に発生しますが、他の原因の可能性もあります。これを解決するには、オリジンに または Content-Length``Transfer-Encoding: chunked
ヘッダーがレスポンスとともに含まれていることを確認します。どちらのヘッダーも存在しない場合、まずそのうちの1つを追加します。ヘッダーの1つが存在する場合、リソース全体をオリジンから直接受け取ることができるか確認します。どちらかのヘッダーが存在し、リソース全体をオリジンから受け取ることができる場合は、Fastly サポートまでご連絡ください。
Error 503 first byte timeout
First byte timeout は、Fastly がオリジンへの接続を確立したものの、最初の1バイトのタイムアウトに設定した時間内にオリジンがレスポンスの送信を開始しなかった場合に発生します。これを解決するには、オリジンの最初の1バイトのタイムアウト時間を延長します。
デフォルトでは、最初の1バイトのタイムアウト時間は15秒に設定されています。延長できる最長タイムアウトは600秒までです。ただし、以下の点に注意してください :
オリジンでシールド機能が利用されている場合、最長タイムアウトは60秒までに設定する必要があります。
クラスタリングでは、最長タイムアウトが60秒に制限されます。オブジェクトがキャッシュ可能である場合、最長タイムアウトを60秒に増加させるには、
Fastly-No-Shield
ヘッダーをvcl_recv
に追加してラスタリングを無効にする必要があります。Fastly-No-Shield
ヘッダーを追加するとキャッシュヒット率に影響が及ぶので、その場合は条件が60秒以上かかる要件を正確にターゲットするようにしてください。
オリジン設定関連エラー
下記ではよくあるオリジン設定関連のエラーについて説明します。
503 Response object too large
Fastly が、取得中のオブジェクトが Fastly サービスのリソースサイズ制限を超過していると判断した場合、クライアントに対して 503 Response object too large
のレスポンスを生成します。セグメントキャッシュ機能を使用すると、これらのエラーを回避できます。
Error 503 connection refused
Connection Refused (接続拒否) は、Fastly がオリジンの指定されたポートに接続を試みて、それが拒否された際に発生します。このエラーの主な原因は、Fastly コントロールパネルでのオリジンのポート番号の設定ミスです。このエラーを解決するにはポート番号を修正することで、オリジンに接続できる正しいポート番号を設定してください。ポート番号の修正により解決しない場合は、オリジン側の設定を見直して Fastly の IP レンジから接続可能であることを確かめてください。
Error 503 illegal Vary header from backend
Illegal Vary header from backend (バックエンドからの不正な Vary ヘッダー) は、バックエンドが誤った形式の Vary ヘッダーをレスポンスとして返した場合に発生します。適切な形式の Vary ヘッダーに従い、Fastly は異なるバージョンのオブジェクトを、Vary で指定されたリクエストヘッダーの値に応じて別々にキャッシュします。
Error 503 network unreachable
Network unreachable (到達不可能なネットワーク) は、Fastly から指定された IP レンジへのルートが見つからない時に発生します。このエラーの主な原因は、ルーターの設定ミスや故障です。このエラーを解決するには、ルーターが正常に動作していることや、適切に設定されていることを確かめてください。
オリジンのヘルスステータス関連エラー
下記ではオリジンのヘルスステータス関連のよくあるエラーについて説明します。
Error 503 backend is unhealthy
Backend is unhealthy (バックエンドのヘルスステータス異常) は、ヘルスチェックによりバックエンドがダウンしていると認識されている場合に発生します。これは、Fastly のエッジサーバーがクライアントリクエストを受け取り、オリジンへのリクエストを行う必要があるにもかかわらずバックエンドのヘルスステータスが異常であると認識されているため、Fastly がリクエストを一切送信しない場合に発生します。このエラーが発生する理由には次のようなものが考えられます :
- オリジンがリクエストに応答するのに長時間を要した
- 一時的なネットワーク上の問題により、ヘルスチェックがオリジンに到達できなかった
- ヘルスチェックが適切に設定されていなかった、または、ヘルスチェックの対象となるリソースが存在しないか変更されていた
このエラーを解決するには、オリジンが適切に設定されていることと、ヘルスチェックの対象となっているオブジェクトが指定された場所に存在していることを確かめてください。
Error 503 no stale object available
No stale object available (失効済みコンテンツ利用不可) は、バックエンド問題発生時に備えて失効済みコンテンツの配信が設定済みであるにも関わらず、失効済みコンテンツが利用不可かつバックエンドに問題が継続している場合に発生します (結果として失効済みコンテンツが利用できない)。このエラーを解決するには、オリジンを正常に動作させるか、ネットワークを確認してください。
接続数超過エラー
下記ではよくある接続数超過エラーについて説明します。
Error 503 backend.max_conn reached
Backend.max_conn reached (バックエンドへの接続数の上限超過) は、Fastly サービス内で定義された同時接続数の上限へ達したバックエンドへ、さらにリクエストしようとした時に発生します。デフォルトで Fastly は、1つのキャッシュノードからオリジンへの接続数を200までに制限しています。これはオリジンの過負荷を防ぐことが目的です。大部分のサイトでは、この設定値は十分大きいと考えられます。ヒット以外のリクエスト数が秒間 10,000 未満でこのエラーメッセージが表示される場合は、オリジンが正常に応答していること (例: オリジンのパフォーマンス低下が発生していないか) を確かめてください。接続数の上限を単に増やすことは、事態を悪化させる可能性があります。オリジンの問題ではないことを確認したら、オリジンへの接続数上限を大きくするか、Fastly support にご連絡ください。このエラーは、"Error 503 maximum threads for service reached" として表示されることもあります。
Error 503 maximum threads for service reached
このエラーは、サービスにおいて同時リクエスト数が安全限界に到達したことを Varnish が検知した場合に発生します。典型的な例としては、オリジンサーバーのレスポンスが遅くなり、サービスが異常な高い負荷状態であることや、リクエスト共有 (request collapsing) を意図的に無効化している場合に発生します。
Director 関連エラー
下記ではよくある Director 関連のエラーについて説明します。
Error 503 no healthy backends
No healthy backends (正常なバックエンドなし) は、ヘルスチェックにより正常とみなせるバックエンドが存在しないことにより、Director が設定通りにトラフィックを処理できない場合に発生します。
Error 503 all backends failed or unhealthy
All backends failed or unhealthy (全てのバックエンドがダウン または ヘルスステータス異常) は、全バックエンドのヘルスチェックが失敗した場合、また、Director が複数のバックエンドから同じエラーを受け取った場合に発生します。
Error 503 quorum weight not reached
Quorum weight not reached (Quorum weight 不足) は、利用可能なバックエンドの不足により、Director が設定通りにトラフィックを処理できない場合に発生します。
これらのエラーを解決するには、オリジンの問題の有無を確認した上で、必要であればそれらの問題に対処してください。また、Quorum 設定が適切であることを確かめてください。例えば、5つのバックエンドが設定された Director に対して85%の Quorum 設定を適用すると、1つのバックエンドのヘルスチェック失敗で、Director 全体のヘルススタータスが異常であると判断されます。
TLS 関連エラー
下記ではよくある TLS 関連のエラーについて説明します。オリジンでのその他の一般的な TLS 関連エラーの詳細については、TLS オリジン設定メッセージガイドを参照してください。
Error 503 SSL handshake error
SSL handshake error (SSL ハンドシェイクエラー) は、Fastly とオリジン間で TLS ネゴシエーションが失敗した場合に発生します。このエラーを解決するには、オリジンの TLS 設定を見直して修正してください。
Error 503 unable to get local issuer certificate
Unable to get local issuer certificate エラーは、証明書チェーン内の証明書が存在しない、または無効な場合に発生するエラーです。このエラーの原因を特定するには、オリジンに対する SSL test の実行を推奨します。このエラー解決に有効な方法が2つあります。
- 証明書が存在しない、または無効な場合は、証明書をダウンロードして置き換えてください。
- 中間証明書とルート証明書がともに正しい場合は、Server Name Indication (SNI) hostname を、Fastly サービスのオリジン TLS options にて設定してください。
Error 503 hostname doesn't match against certificate
Hostname doesn't match against certificate (ホスト名と証明書の不一致) は、サービスのオリジン TLS 設定で指定された証明書のホスト名が、コモンネーム (CN) または Subject Alternate Names (SAN) のいずれとも一致しない場合に発生するエラーです。このエラーを解決するには、オリジン証明書の CN または SAN のいずれかと一致する名前を、証明書ホスト名として入力してください。
Error 503:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert
このエラーは、オリジンとの TLS ハンドシェイクにおいて Server Name Indication (SNI) が必要であるにもかかわらず、SNI hostname フィールドが空欄か、間違った値が入力されている場合に発生します。このエラーを解決するには、SNI hostname フィールドにホスト名を入力してください。たいていの場合、この値は証明書ホスト名の内容と一致します。
Error 503 error:1408F10B:SSL routines:ssl3_get_record:wrong version number
このエラーは、Fastly の TLS 設定とオリジンの TLS 設定との間で不一致が原因で、Fastly がオリジンに到達する際に接続上の問題があった場合に発生します。このエラーを解決するには、オリジンとFastly 間に矛盾が存在する場合、ホストの TLS 設定を確認し修正してください。Server Name Indication (SNI) 値が、Fastly からの接続が期待される証明書で使用されるドメインと一致することを確認します。
以下のコマンドを実行することで、オリジン証明書で使用されるドメインが SNI 値と一致することを確認できます。SSL_SNI_HOSTNAME
を SNI 値に置き換えます。
openssl s_client -showcerts -connect 2a04:4e42:600::313:443 < /dev/null -servername SSL_SNI_HOSTNAME | openssl x509 -text`
成功すると、これにより証明書に関する詳細が返されます。
Error 503 certificate has expired
Certificate has expired (証明書の有効期限切れ) は、オリジンにインストールされた証明書の有効期限が切れている場合に発生します。このエラーを解決するには、証明書を更新するか、新しいものをダウンロードしてください。