
CDNやWAF、DDoS保護を手軽に導入できる超強力なサービス「Cloudflare」。
しかし、DNSを切り替えた直後やSSL設定を変更した瞬間に、見慣れない「Error 520」「Error 521」といった画面が表示されてサイトが真っ白になった経験はないでしょうか。
これらはRFCで定義された標準HTTPステータスコードではなく、Cloudflareが独自に定義しているエッジエラー(52x系)です。一般的な500番台(Internal Server Error)とは異なり、原因の所在が「ブラウザ」「Cloudflare」「オリジンサーバー(自社サーバー)」のどこにあるかを正しく把握しないと、見当違いな場所を調査して復旧に何時間も溶かすことになります。
本記事では、Cloudflare導入時・運用時につまずきやすい520〜526エラーの仕組みと、各エラーの具体的な原因・切り分け手順を徹底解説します。
1. 前提知識:Cloudflareを挟んだ通信モデルとエラーの発生ポイント
Cloudflareをプロキシ(オレンジ雲アイコンを有効)として導入すると、クライアントとサーバーの通信は2つの独立した区間に分かれます。
[クライアント(ブラウザ) / Client (Browser)]
│
▼ ◀─── ① クライアント区間(HTTPS) / Client Section (HTTPS)
[Cloudflare エッジサーバー / Cloudflare Edge Server]
│
▼ ◀─── ② オリジン区間(HTTP / HTTPS) / Origin Section (HTTP / HTTPS)
[オリジンサーバー(Nginx / Apache / ALB等) / Origin Server (Nginx / Apache / ALB, etc.)]- 52x系エラーの本質: ブラウザとCloudflare間の通信(①)は正常に成立しているものの、Cloudflareエッジからオリジンサーバーへの通信(②)で問題が発生したことを意味します。
Cloudflareのエラー画面が表示されたら、まずは画面中央の図を確認してください。「Browser」「Cloudflare」「Host」の3つのアイコンのうち、「Host(オリジンサーバー)」に赤いバツ印(×)がついているはずです。つまり、解決すべき課題の9割はオリジンサーバー側の設定やネットワーク環境にあります。
2. Cloudflare 520〜526エラー完全解説&原因切り分け
ここからは、実務で遭遇頻度が高い順に各エラーの詳細と具体的な対処法を解説します。
Error 520: Web Server Returns an Unknown Error
【状態】 オリジンサーバーがCloudflareの解釈できない空の応答や不正なレスポンスを返した。
- 主な原因:
- オリジンサーバー側でプロセス(PHP-FPM、Node.js等)がレスポンス生成途中にクラッシュした。
- レスポンスヘッダーの合計サイズがCloudflareの上限(通常16KB)を超過している(Cookieの肥大化など)。
- オリジンがプロトコル違反の不正なHTTPヘッダーを返している。
- 対処法:
- オリジン側のエラーログ(
/var/log/nginx/error.logやアプリケーションログ)を確認し、クラッシュの有無を特定する。 - セッションCookieやJWTが巨大化していないか確認し、ヘッダーサイズを削減する。
- Nginxの場合、
proxy_buffer_sizeやlarge_client_header_buffersの設定を見直す。
- オリジン側のエラーログ(
Error 521: Web Server Is Down
【状態】 Cloudflareがオリジンの指定ポート(80/443)に接続を試みたが、明示的に接続が拒絶(TCP RST / Connection Refused)された。
- 主な原因:
- オリジンサーバー上のWebサーバー(Nginx、Apache等)が起動していない・落ちている。
- サーバーのファイアウォール(iptables、UFW、AWS Security Group等)でCloudflareのIPアドレス帯がブロックされている。
fail2banなどの侵入検知ツールが、同一IP(Cloudflare)からの大量アクセスを攻撃と誤認して遮断した。
- 対処法:
systemctl status nginx等でWebサーバープロセスの稼働状態を確認し、再起動する。- セキュリティグループやファイアウォールで、Cloudflare公式のIPレンジ(IPv4/IPv6)からのインバウンド通信(80/443)を明示的に許可(ホワイトリスト化)する。
fail2banの設定でCloudflareのIP帯を除外(ignoreip)する。
Error 522: Connection Timed Out
【状態】 Cloudflareとオリジンサーバー間のTCP 3-wayハンドシェイクがタイムアウト(約15秒以内)した。
- 主な原因:
- オリジンサーバーの負荷(CPU/メモリ/ネットワーク)が高すぎてTCP接続要求を処理できていない。
- ファイアウォールがCloudflareのSYNパケットをドロップ(破棄)している(拒絶ではなく無応答状態)。
- ルーティングの不整合(非対称ルーティング等)により、オリジンからの返信パケットがCloudflareへ戻っていない。
- 対処法:
- オリジンのリソース使用率(ロードアベレージ)を確認し、サーバーのスペックアップやチューニングを行う。
- ファイアウォールのドロップログを確認し、Cloudflareからの通信を許可する。
keepalive_requestsやkeepalive_timeoutを適切に設定し、接続効率を改善する。
Error 523: Origin Is Unreachable
【状態】 Cloudflareがオリジンサーバーへのネットワーク経路(ルート)を見つけられない。
- 主な原因:
- CloudflareのDNS管理画面で設定した「Aレコード」「AAAAレコード」「CNAME」のIPアドレス・ホスト名が間違っている。
- オリジン側のホスティング事業者やISPで大規模なBGPルーティング障害が発生している。
- 対処法:
- Cloudflareダッシュボードの「DNS」設定を開き、オリジンの最新IPアドレスが正しく登録されているか確認する。
- オリジンサーバーのグローバルIPが固定IPではなく動的IP(DHCP)になっており、IP変更に追従できていない場合は固定化する。
Error 524: A Timeout Occurred
【状態】 TCP接続は正常に完了したが、オリジンサーバーが100秒以内にHTTPレスポンスを返さなかった。
- 主な原因:
- バックエンドで重いデータベースクエリ、大量データのCSV/PDF出力、外部API連携などの長時間処理を実行している。
- PHPの
max_execution_timeやFastCGIタイムアウトがCloudflareの100秒制限とバッティングしている。
- 対処法:
- 時間のかかる重い処理は、非同期キュー(Redis/RabbitMQ/AWS SQS等)を用いてバックグラウンド実行にし、ポーリングまたはWebhookで結果を返すアーキテクチャに改修する。
- (※Cloudflare Enterpriseプラン以外では、この100秒タイムアウトの制限を延ばすことはできません)
Error 525: SSL Handshake Failed
【状態】 Cloudflareとオリジンサーバー間のTLS/SSLハンドシェイク(ネゴシエーション)に失敗した。
- 主な原因:
- Cloudflare側のSSL設定が
FullまたはFull (strict)になっているのに、オリジン側がポート443(HTTPS)をリッスンしていない。 - 暗号スイート(Cipher Suites)の互換性がない(オリジンが古い暗号化方式しかサポートしていない)。
- SNI(Server Name Indication)の設定不備。
- Cloudflare側のSSL設定が
- 対処法:
- オリジンサーバー側でSSL/TLSが有効になっており、ポート443で通信を受け付けられる状態か確認する。
- オリジン側のTLSバージョン設定を見直し、TLS 1.2 または TLS 1.3 を有効化する。
Error 526: Invalid SSL Certificate
【状態】 CloudflareのSSL設定が Full (strict) の状態で、オリジンサーバーのSSL証明書の検証に失敗した。
- 主な原因:
- オリジンサーバーのSSL証明書が有効期限切れになっている。
- 自己署名証明書(いわゆる「オレオレ証明書」)を使用している。
- 証明書に記載されているドメイン名(SAN / CN)がリクエスト先ドメインと一致していない。
- 対処法:
- オリジンサーバーに有効な公的証明書(Let’s Encrypt等)を導入・更新する。
- または、Cloudflareダッシュボードから無料・最大15年間有効な「Cloudflare Origin CA証明書」を発行し、オリジンサーバーのWebサーバー(Nginx等)に設定する。
3. 最大の罠:「SSL/TLS暗号化モード」の正しい選び方
Cloudflare導入時のトラブルで最も多いのが、SSL/TLS暗号化モードの選定ミスによる「525/526エラー」および「リダイレクトループ(ERR_TOO_MANY_REDIRECTS)」です。
Cloudflareダッシュボードの「SSL/TLS」➔「概要」で選択できる4つのモードの特徴と、それぞれの落とし穴を整理します。
① Flexible:
[ブラウザ] ──(HTTPS: 443)──► [Cloudflare] ──(HTTP: 80)──► [オリジン]
② Full:
[ブラウザ] ──(HTTPS: 443)──► [Cloudflare] ──(HTTPS: 443)──► [オリジン (自己署名OK)]
③ Full (strict) 【推奨】:
[ブラウザ] ──(HTTPS: 443)──► [Cloudflare] ──(HTTPS: 443)──► [オリジン (有効な証明書必須)]① Flexible:
[Browser] ──(HTTPS: 443)──► [Cloudflare] ──(HTTP: 80)──► [Origin]
② Full:
[Browser] ──(HTTPS: 443)──► [Cloudflare] ──(HTTPS: 443)──► [Origin (Self-signed OK)]
③ Full (strict) [Recommended]:
[Browser] ──(HTTPS: 443)──► [Cloudflare] ──(HTTPS: 443)──► [Origin (Valid Certificate Required)]各モードの特徴と選び方
| モード | オリジン側のSSL | 特徴と注意点 |
|---|---|---|
| Off | 不要 | 通信が一切暗号化されません(非推奨)。 |
| Flexible | 不要(HTTP:80) | 【罠】 オリジンサーバーにSSL証明書がなくてもブラウザ側をHTTPS化できますが、オリジン側で「HTTP→HTTPSへのリダイレクト」を設定していると、**リダイレクトループ(無限ループ)**が発生してサイトが落ちます。セキュリティ的にもCloudflare ⇄ オリジン間が平文になるため推奨されません。 |
| Full | 必要(自己署名可) | オリジン側もHTTPS(443)で通信します。自己署名(オレオレ)証明書でもエラーにならず通信可能です。 |
| Full (strict) | 有効な証明書が必須 | 【最も安全・推奨】 公的認証局(Let’s Encrypt等)または「Cloudflare Origin CA証明書」による正規の証明書が必要です。期限切れや自己署名の場合は 526 Invalid SSL Certificate でブロックされます。 |
おすすめの構築手順:Cloudflare Origin CA証明書を使う
オリジン側のLet’s Encrypt更新管理を自動化するのが面倒な場合は、Cloudflareが提供する「Origin CA証明書」の導入が最も簡単で確実です。
- Cloudflare管理画面 ➔ 「SSL/TLS」 ➔ 「オリジン サーバー」 を開く。
- 「証明書の作成」 をクリックし、対象ドメインを選択して有効期間(最大15年)を指定して作成。
- 発行された
オリジン証明書(cert)と秘密鍵(key)をコピーしてオリジンサーバーに配置する。 - Nginx等の設定ファイルで証明書を指定し、CloudflareのSSLモードを
Full (strict)に設定する。
4. 本番障害時に5分で切り分けるトラブルシューティング手順
「52xエラーが出たが、どこから手を付ければいいかわからない」という場合は、以下の3ステップで障害箇所を特定します。
STEP 1: curl の --resolve でオリジンサーバーを直叩きする
CloudflareのキャッシュやWAFを完全に迂回し、ローカルのDNS解決を上書きしてオリジンサーバーのIPアドレスへ直接リクエストを送ります。
# 書式: curl -Iv --resolve <ドメイン名>:<ポート>:<オリジンのグローバルIP> https://<ドメイン名>/
curl -Iv --resolve example.com:443:203.0.113.195 https://example.com/- ここでエラーが出る場合: 原因は100% オリジンサーバー側(Webサーバー停止、FW遮断、証明書エラー) にあります。
- ここで正常な200番台が返る場合: 原因は Cloudflareの設定(SSLモード不一致、DNSのレコード設定ミス等) にあります。
STEP 2: CloudflareのIPアドレス帯がファイアウォールで遮断されていないか確認する
オリジンのファイアウォール(UFW / iptables / AWSセキュリティグループ等)が、Cloudflareのエッジサーバーからのアクセスをブロックしていないか確認します。
Cloudflareは公式にIPアドレス一覧(IPv4/IPv6)を公開しています。Nginxでは以下のように設定してクライアントの本来のIPを復元しつつ、不正なアクセスを制限します。
# /etc/nginx/conf.d/cloudflare.conf
# CloudflareのIPアドレスを信頼する設定
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
# (中略:公式の全IP範囲を指定)
set_real_ip_from 2400:cb00::/32;
real_ip_header CF-Connecting-IP;STEP 3: 「Pause Cloudflare on Site」で一時的にプロキシを解除する
緊急時にCloudflareの設定が原因かオリジンが原因かを即座に切り分けたい場合、Cloudflareダッシュボードの右下メニューにある 「Pause Cloudflare on Site(サイトでCloudflareを一時停止)」 を実行します。
DNSのみが有効になりプロキシ(オレンジ雲)がバイパスされるため、切り分けが迅速に行えます。
6. まとめ:Cloudflare 52xエラー切り分けチートシート
最後に、エラーコードごとの原因特定チェックリストをまとめます。
520 ──▶ 【ヘッダー・アプリ】 Cookie肥大化 / アプリの異常終了
521 ──▶ 【Webサーバー・FW】 Nginxが停止 / セキュリティグループでCloudflare IPを遮断
522 ──▶ 【サーバー負荷・FW】 TCPハンドシェイク失敗 / パケットドロップ
523 ──▶ 【DNS・ルーティング】 AレコードのIP設定ミス
524 ──▶ 【処理時間制限】 バックエンドの処理が100秒を超過
525 ──▶ 【SSLネゴシエーション】 443ポート未リッスン / TLSバージョン不一致
526 ──▶ 【SSL証明書】 Full (strict) 環境下での証明書期限切れ・オレオレ証明書520 ──▶ [Headers / App] Bloated cookies / Application crash
521 ──▶ [Web Server / FW] Nginx is down / Security Group blocking Cloudflare IPs
522 ──▶ [Server Load / FW] TCP handshake timeout / Dropped packets
523 ──▶ [DNS / Routing] Incorrect origin IP in A/AAAA record
524 ──▶ [Execution Timeout] Backend processing exceeded 100s limit
525 ──▶ [SSL Negotiation] Port 443 not listening / TLS version mismatch
526 ──▶ [SSL Certificate] Expired or self-signed cert under Full (strict) modeCloudflareの52xエラーは、通信区間(Cloudflare ⇄ オリジン)のどこでパケットやハンドシェイクが止まっているかを順を追って切り分ければ、必ず短時間で原因を特定・復旧できます。本番障害時のトラブルシューティングにぜひ役立ててください。
おわりに
Cloudflare導入直後に発生する 520〜526 エラーは、一見すると原因の特定が難しく見えますが、すべて「Cloudflareエッジとオリジンサーバーの間の通信」で何らかの不整合が起きているサインです。
- ネットワーク・FW起因: 521 / 522 / 523 ➔ オリジン停止やIP遮断、DNS設定をチェック
- アプリケーション・負荷起因: 520 / 524 ➔ ヘッダー肥大化や100秒超の重い処理を見直し
- SSL/TLS設定起因: 525 / 526 ➔ SSLモードと証明書(Origin CA等)の整合性を確認
まずは curl --resolve コマンドでCloudflareを迂回してオリジン単体の生死を確認し、どのレイヤー(TCP、SSL、HTTPヘッダー、タイムアウト)で遮断されているかを順を追って切り分けましょう。
正しい通信モデルとSSLモードの仕組みさえ押さえておけば、本番障害時でも数分で原因を特定して迅速に復旧できるようになります。
💡 設定ファイルを即座に作成したい方へ
ドメインとポートを入れるだけで設定を自動出力する Cloudflare × Nginx 設定ジェネレーター を公開しています。コピペで即適用できます。




コメント