Cloudflare Error 520 とは?原因と解決方法

Advertisement
Cloudflare Error 520 とは?
Error 520 は、Cloudflare 独自のステータスコードの1つです。エラーページには 「Web server is returning an unknown error」(ウェブサーバーが不明なエラーを返しています)という見出しと Error code 520、Ray ID、そして3つのボックスが表示されます。ブラウザ(Working)、Cloudflare(Working)、ホスト(Error)です。
Cloudflare のドキュメントでは、このエラーを「オリジンサーバーが Cloudflare に空の応答、不明な応答、または予期しない応答を返した」状態と定義しています。つまり、Cloudflare はウェブサイトの実際のサーバー(オリジン)に接続したものの、返ってきたのは中継できる正しい HTTP レスポンスではなかったということです。ステータスコードがない、応答が空、接続がリセットされた、解析できない内容だった、といったケースです。
520 は「その他すべて」を受け止めるエラーです。何が起きたかを判別できる場合(接続拒否、タイムアウト、SSL の失敗)、Cloudflare はより具体的なコードを使います。つまり 520 は、Cloudflare が分類できない形でオリジンが応答したことを意味します。
Error 520 と 521、522、523、524、525、526 の違い
Cloudflare の 52x コードは、いずれも Cloudflare とオリジンの間の問題を表しています。番号を見れば、どこを調べればよいかがわかります。
| コード | ページの文言 | 何が起きたか |
|---|---|---|
| 520 | Web server is returning an unknown error | オリジンから空の応答、不明な応答、または予期しない応答が返った |
| 521 | Web server is down | オリジンが接続を拒否した |
| 522 | Connection timed out | Cloudflare がオリジンとの接続を確立できなかった |
| 523 | Origin is unreachable | オリジンへの経路がない(DNS のオリジン IP を確認) |
| 524 | A timeout occurred | 接続はできたが、オリジンが時間内に応答しなかった |
| 525 | SSL handshake failed | オリジンとの HTTPS ハンドシェイクに失敗した |
| 526 | Invalid SSL certificate | オリジンの証明書が Full (strict) モードの検証を通らない |
ページに素の 502 や 504 が表示される場合は、502 Bad Gateway と 504 Gateway Timeout をご覧ください。521 と 522 の場合は、ポートチェッカーで、オリジンのポート 443 または 80 が外部からの接続を受け付けているかを確認します。525 と 526 の場合は、SSL 証明書チェックでオリジンの証明書を確認できます。TLS バージョンや暗号スイートの問題については、ERR_SSL_VERSION_OR_CIPHER_MISMATCH で解説しています。
Advertisement
520 エラーの原因
Cloudflare は、トラブルシューティングのドキュメントで次の原因を挙げています。
オリジンサーバーのクラッシュや設定ミス。 たとえば、PHP や Node のプロセスがリクエストの処理中に終了してしまうケースです。
ファイアウォールやセキュリティプラグインが、オリジンで Cloudflare の IP をブロックしている。 そのため、接続に応答せずに切断してしまいます。
レスポンスヘッダーが 128 KB を超えている。 多くの場合、Cookie が多すぎるか大きすぎることが原因です。
空または不正な形式の応答。 HTTP ステータスコードも本文もない応答です。
レスポンスヘッダーの欠落、またはオリジンが適切な HTTP エラーレスポンスを返さない。
HTTP/2 to Origin が有効なときの、オリジン側の HTTP/2 設定の誤り。
Authenticated Origin Pulls が Cloudflare で有効になっているのに、オリジン側がそれに対応する設定になっていない。
訪問者の方へ
ウェブサイトのサーバーを直すことはできませんが、試す価値のあることが2つあります。1つは、1分ほど待ってから再読み込みすることです。クラッシュや再起動が原因の 520 は、自然に解消することがあります。もう1つは、サイトの Cookie を削除することです。Cookie によってヘッダーが大きくなりすぎているのが原因なら、そのサイトの Cookie を削除する(アドレスバー左端のアイコン → Cookie とサイトデータ)ことで解決する場合があります。
それでも失敗が続く場合は、エラーページ下部にある Ray ID を添えてサイト管理者に知らせましょう。Ray ID があれば、管理者は Cloudflare 上であなたのリクエストを正確に特定できます。
Advertisement
解決策1:オリジンサーバーのエラーログを読む
Cloudflare が最初に推奨しているのは、エラーが発生した時刻のオリジンのログを確認することです。クラッシュ、メモリ不足による強制終了、接続リセットはそこに記録されています。
sudo tail -n 50 /var/log/nginx/error.log # または /var/log/apache2/error.log
journalctl -u your-app --since "15 min ago" # アプリのサービスログ
pm2 logs --lines 50 # PM2 で動かしている Node アプリ
dmesg -T | grep -i "killed process" # メモリ不足による強制終了解決策2:Cloudflare を経由せずにオリジンをテストする
Cloudflare を迂回してオリジンから直接ページをリクエストし、生のレスポンスを確認します。curl を使えば、1回のリクエストに限ってホスト名をオリジンの IP に向けられます。
# 203.0.113.10 をオリジンサーバーの IP に置き換える
curl -sv --resolve example.com:443:203.0.113.10 https://example.com/broken-page -o /dev/null
# 確認ポイント:通常の "HTTP/1.1 200"(または HTTP/2 200)のステータス行とヘッダー。
# ここで "Empty reply from server" や "Connection reset by peer" が出れば、520 を再現できている。Cloudflare は一時的な回避策として、DNS レコードを DNS のみ(グレーの雲)に設定するか Cloudflare を一時停止し、調査中は訪問者が直接オリジンにアクセスできるようにする方法も提案しています。ただし、これによってオリジンの IP が公開される点に注意してください。DNS Robot の DNS 検索では、あなたのドメインが現在世界中からどの IP に見えているかを確認できます。また HTTP ヘッダーチェックツールでは、通信が Cloudflare を経由している場合に server: cloudflare と cf-ray ヘッダーが表示されます。
Advertisement
解決策3:オリジンで Cloudflare の IP 範囲を許可する
訪問者のトラフィックはすべて Cloudflare の IP 範囲からオリジンに届きます。そのため、「疑わしい」IP をレート制限したりブロックしたりするファイアウォール、fail2ban の jail、セキュリティプラグインが、Cloudflare 自体をブロックしてしまうことがあります。https://www.cloudflare.com/ips/ で公開されている範囲をファイアウォールとセキュリティプラグインで許可し、ウェブサーバーが CF-Connecting-IP ヘッダーから実際の訪問者の IP を読み取るように設定してください。そうすれば、レート制限が Cloudflare ではなく訪問者に適用されます。
解決策4:レスポンスヘッダーを 128 KB 未満に抑える
Cloudflare は、ヘッダーが 128 KB を超えるオリジンのレスポンスを拒否します。その原因はたいてい Cookie です。ページが送る Set-Cookie ヘッダーの数とサイズを確認してください。不要になった Cookie を削除し、セッション Cookie を小さく保ち、Cookie に大きなデータを書き込むアプリやプラグインは避けましょう。
Advertisement
解決策5:HTTP/2 to Origin と Authenticated Origin Pulls を確認する
HTTP/2 to Origin: Cloudflare(スピードの設定内)で有効になっているのに、オリジンの HTTP/2 設定が壊れていると、レスポンスが 520 で失敗することがあります。Cloudflare は、オリジンの HTTP/2 設定を確認するか、HTTP/2 to Origin をオフにして確かめることを勧めています。
Authenticated Origin Pulls: Cloudflare でこれがオンになっている場合、オリジンは Cloudflare のクライアント証明書を受け入れるように設定されている必要があります。設定されていなければ、機能をオフにするか、オリジン側の設定を完了させてください。
解決策6:Cloudflare サポートに送る情報
オリジンに問題が見当たらないのに 520 が続く場合、Cloudflare は次の情報を求めています。
エラーが発生する完全な URL。
エラーページに表示される cf-ray ID。
http://yourdomain.com/cdn-cgi/traceの出力。2つの HAR ファイル(DevTools → ネットワーク → エクスポート)。1つは Cloudflare を有効にした状態、もう1つは無効にした状態で取得します。
サイトが Cloudflare の背後にあるか確認する
DNS Robot の HTTP ヘッダーチェックは、任意の URL のステータスコード、server ヘッダー、cf-ray ID を表示します。520 が返っているか、サイトの前段に Cloudflare があるかを確認できます。
試す HTTP ヘッダーチェックAdvertisement
よくある質問
ウェブサイトのオリジンサーバーが、Cloudflare に空の応答、不明な応答、または予期しない応答を返したことを示す Cloudflare のエラーです。ブラウザと Cloudflare は正常に動作しており、オリジンサーバーが正しく応答していません。