サイト訪問者のブラウザに「Error 520」が表示される場合、オリジンサーバーから空のレスポンスや不明なレスポンス、あるいは想定外のレスポンスが返されたことを受けて、Cloudflare がエラーメッセージを表示している状態を意味します。
520エラーが発生した場合は、まず原因を特定するためのトラブルシューティングを行い、その上で、以下の手順に沿って対処することができます。
520エラーのトラブルシューティング方法
520エラーはサーバーの問題が原因で発生するため、エラーログを調べることでトラブルシューティングできます。

Cloudflareを無効にする
トラブルシューティングを開始する前に、まずは Cloudflare を一時的に無効化しましょう。Cloudflare を介さない状態でも問題が再現するかどうかを確認することで、根本的な原因の特定に役立ちます。
ステップ1
Cloudflareにログインし、該当のサイトを選択します。

ステップ2
「DNS」>「レコード」を開き、該当のレコードの右側にある「編集」をクリックして展開し、「プロキシ ステータス」欄のオレンジ色の蜘蛛のアイコンの横にあるトグルをオフにします。雲がグレーに変われば、Cloudflare は無効化されています。

Cloudflareを一時停止する
あるいは、ログイン後にCloudflareを一時停止することもできます。
ステップ1
先ほどと同様に、Cloudflareにログイン後、該当のサイトを選択します。

ステップ2
そのまま「概要」ページを下にスクロールして、「高度な操作」セクションの「Cloudflare を一時停止する」をクリックします。

ステップ3
表示される内容を確認の上、「一時停止」をクリックして確定します。

開発モードに切り替える
Cloudflareの一時停止も無効化も行いたくない場合は、開発モードに切り替えます。開発モードでは、Cloudflareが有効をにしたまま、520エラーのトラブルシューティングを行うことができます。
ステップ1
Cloudflareにログインした後、ページの上部にある「Caching」>「構成」に移動します。

ステップ2
「開発モード」セクションまで下にスクロールして、トグルをオンにします。

サーバーのエラーログを確認する
Cloudflareを無効にするか、一時停止するか、開発モードに切り替えたら、サーバーのエラーログを確認し、520エラーのトラブルシューティングを行います。
エラーログの場所はサーバーによって異なります。アクセス方法がわからない場合は、ご利用のサーバーに確認してください。
たとえば、cPanelを採用するサーバーをご利用の場合は、以下の手順で確認可能です。
ステップ1
cPanelにログインし、ダッシュボードで「Metrics」セクションの「Errors」を選択します。

ステップ2
「Errors」画面には、最大300件のエラーが新しい順に表示されます(ユーザーまたはサーバーによって設定が調整される場合は300件以上表示されることも)。

MyKinstaで520エラーのログを確認する
Kinstaをご利用の場合は、以下の手順でエラーログを確認してください。
ステップ1
MyKinstaにログインし、左側メニューから「サイト」をクリックし、トラブルシューティングを行うサイトを選択します。

ステップ2
「ログ」画面に移動します。デフォルトでは、エラーログが表示されます。何も表示されない場合は、そのサイトではエラーが発生したことがないことを意味します。

エラーログの読み方
エラーログの各メッセージには構造があり、その構造さえ理解できれば、エラーメッセージを解釈することができます。
[Fri Oct 11 17:00:30 2019] [error] [client 123.4.56.7] error description: /path/to/file/with/error
エラーログには、まずメッセージの日時が表示され、その後にメッセージの重大度を示すLogLevel ディレクティブが続きます。
次に、問題の原因となったクライアントのIPアドレスが記載されます。
最後に、実際のエラーメッセージの内容が表示されます。ここには、エラーの影響を受けたファイルのパスが含まれている場合もあります。
エラーログに表示されるLogLevelの重大度は、以下のとおりです。
-
Emerg(緊急)—緊急度の高いエラーであり、サーバーが利用できない状態
-
Alert(警報)—直ちに対応が必要な状態
-
Crit(重大)—重大な問題が発生していることを示す
-
Error(エラー)—エラーが発生している
-
Warn(警告)—重大ではないものの、注意が必要な問題
-
Notice(注意)—サーバーは正常に動作しているが、重要な通知事項あり
-
Info(情報)—一般的な情報を示す
-
Debug(デバッグ)—デバッグが有効な場合に表示される詳細情報
cURLコマンドを使って520エラーのトラブルシューティングを行う
オリジンサーバーに対してテストを実行することで、cURLコマンドを使用して520エラーのトラブルシューティングを行うことができます。
curl -vso /dev/null --user-agent "Mozilla 5.0" -H "Host: your-site.com" http://123.45.6.789/wp-login.php
「http://your-site.com」および「123.45.6.789」は、必ず実際のドメイン、およびIPアドレスに変更してください。ログインページを調整している場合は、「wp-login.php」も変更が必要です。
正常のレスポンスヘッダーは、以下のようになります。
* Hostname was NOT found in DNS cache
* Trying 123.45.6.789...
* Connected to 123.45.6.789 (123.45.6.789) port 80 (#0)
> GET /login HTTP/1.1
> User-Agent: Mozilla 5.0
> Accept: */*
> Host: your-site.com
>
< HTTP/1.1 200 OK
< Content-Type: text/html
< Date: Day, DD, Month Year Hour:Minute:Second Timezone
{ [12345 bytes data]
* Connection #0 to host 123.45.6.789 left intact
このような表示が確認できれば、サイトには正常にアクセスできており、520エラーは発生していないことを意味します。
一方で、以下の例のようなレスポンスヘッダーが表示される場合は、Cloudflareが有効な状態で 520エラーが発生していることを示しています。
* Hostname was NOT found in DNS cache
* Trying 123.45.6.789...
* Connected to 123.45.6.789 (123.45.6.789) port 80 (#0)
> GET /login HTTP/1.1
> User-Agent: Mozilla 5.0
> Accept: */*
> Host: your-site.com
>
* Empty reply from server
* Connection #0 to host 123.45.6.789 left intact
HARファイルの生成方法
HARとはHTTPアーカイブファイルのことで、オリジンサーバーへ直接送信されたリクエストや、Cloudflareを経由したリクエストの記録が含まれています。
HARファイルは、オリジンサーバーからのレスポンスヘッダーと、プロキシとして動作しているCloudflareからのレスポンスヘッダーを比較できるため、トラブルシューティングに役立ちます。
また、520エラーの原因がヘッダーサイズの過大であるかどうかを確認するためにも使用されます。
HARファイルは、以下の手順でブラウザから作成できます。
Chrome
ステップ1
Chromeを開いて任意の場所を右クリックし、「検証」を選択します。

ステップ2
デベロッパーツールが開いたら、「ネットワーク」タブをクリックして、左上の丸が赤になっていることを確認します。グレーになっている場合は、クリックしてください。

ステップ3
記録ボタンの横にある「ログを保持」にチェックを入れて、左側にある禁止マーク(ネットワーク ログを消去)をクリックします。

ステップ4
520エラーが表示されるページを読み込み、開発者ツールのメッセージ画面の任意の場所を右クリックします。
「コンテンツと一緒に HAR としてすべて保存」を選択し、ファイルをコンピューターに保存します。

Firefox
ステップ1
Firefoxを開き、ページの任意の場所を右クリックして、「調査」を選択します。

ステップ2
「ネットワーク」タブに移動し、520エラーが表示されるページにアクセスします。パネルのメッセージを右クリックして、「HAR 形式ですべて保存」を選択し、ファイルをコンピュータに保存します。

Edge
ステップ1
Edgeブラウザを開き、ページを右クリックします。「要素の検査」を選択します。

ステップ2
「Network」タブに移動し、Chrome同様、左側の丸いアイコンが赤色になっていることを確認します。赤色でない場合は、クリックしてください。「Preserve log(ログを保持)」にチェックを入れて、左側の禁止マークをクリックしてメッセージをクリアします。

ステップ3
520エラーが発生しているページに移動します。次に開発ツールのパネルのメッセージを右クリックして、「Save all as HAR with content(コンテンツ付きのHAR形式ですべて保存」を選択し、ファイルをコンピュータに保存します。
Safari
ステップ1
Safariを開いたら、Windowsの場合はページを右クリックします。Macの場合は、上部メニューバーの「開発」>「Webインスペクタを表示」を開きます。「開発」メニューが表示されない場合は、「Safari」>「設定」に移動し、「詳細」タブの「Webデベロッパ用の機能を表示」にチェックを入れると出現します。
ステップ2
「ネットワーク」タブを開き、丸の中に3つの線が入ったアイコンをクリックして、「ログを保持」を選択します。続いて、520エラーが発生しているページに移動します。

ステップ3
「書き出す」をクリックして、HARファイルをコンピューターに保存します。

520エラーの主な原因と解決方法
エラーログを入手できたら、まずログ内を確認し、以下のいずれかの問題が見られないか探してください。該当するものが見つかった場合は、次の手順に沿って対処します。
オリジンサーバー上のPHPアプリケーションがクラッシュしている
520エラーのよくある原因の1つは、サーバー上で動作しているPHPアプリケーションのいずれかがクラッシュしていることです。PHPを再起動することで、エラーが解消される場合があります。
ステップ1
Apacheサーバーでは、SSHを使用して以下のコマンドを入力します。
apache2ctl restart
Nginxサーバーでは、以下のコマンドを使用してPHPを再起動します。
service nginx restart
PHPをMyKinstaで再起動する
Kinstaをご利用の場合は、数回のクリックでPHPを再起動できます。
ステップ1
MyKinstaにログインし、左側メニューから「サイト」に移動し、該当のサイトを選択します。

ステップ2
「ツール」画面に移動し、「PHPの再起動」をクリックします。

CloudflareのIPアドレスがホワイトリストに登録されていない
520エラーが発生するもう1つの原因として、CloudflareのIPアドレスがホワイトリストに登録されていないことが挙げられます。IPアドレスのホワイトリスト登録は可能ですが、手順はご利用のサーバーによって異なります。
IPアドレスのホワイトリスト登録方法が分からない場合や、該当する設定項目が見つからない場合は、ご利用のサーバーサービスにお問い合わせください。
なお、KinstaではCloudflareのIPアドレスはデフォルトでホワイトリストに登録されているため、この原因を心配する必要はありません。ただし、520エラーのその他の原因には影響しません。
TCPのアイドルタイムアウトが300秒未満に設定されている
set service Service-HTTP-1 -svrTimeout 500
ヘッダーが8KBを超えている
サーバーからの空の応答
この問題は、サイトからHTTPステータスコードやレスポンス本文が返されない場合に発生します。解決するには、サイトのドメインのDNS設定が正しく構成されているかを確認します。
設定の確認手順は、DNSサービスによって異なります。サーバープランにDNSが含まれている場合は、サーバーに確認してください。
DNS設定を更新した場合、変更が反映されるまで最大72時間かかることがあります。その間、サイトが最大3日間利用できなくなる可能性があります。
DNS設定を変更した後は、サイトのキャッシュをクリアします。WordPressサイトにキャッシュプラグインがインストールされている場合は、そのプラグインの手順に従ってキャッシュをクリアします。手順がわからない場合は、プラグインのドキュメントを参照してください。
サーバーのコントロールパネルからキャッシュをクリアできる場合もあります。これについても、手順がわからない場合は、サーバーに問い合わせてみてください。
Kinstaをご利用の場合は、ログイン後、「サイト」をクリックして、該当のサイトを選択します。それから「キャッシュ」画面に移動して、「全てのキャッシュをクリア」をクリックします。

DNS設定を更新し、サイトが再び利用可能になった後、サイトのキャッシュをクリアしても520エラーが引き続き発生する場合は、サーバーを再起動します。
設定メニューにサーバーの再起動オプションが見当たらない場合は、Kinstaのカスタマーサポートにお知らせください。
レスポンスヘッダーの欠落
Mozillaによると、レスポンスヘッダーとは、HTTPレスポンスで使用されるHTTPヘッダーのうち、メッセージ本文の内容には直接関係しないものを指します。Age、Location、Serverなどのレスポンスヘッダーは、レスポンスに関する詳細な情報を提供するために使用されます。
レスポンスヘッダーが欠落する原因はさまざまです。
この問題に対処するには、Fiddlerなどのデバッグツールを使用して問題を解析し、原因を特定したうえで修正するのが有効です。
¥
サーバーが適切なHTTPエラーレスポンスを返しません
サーバーが無効なエラーレスポンスを送信したとき、520エラーが発生する場合があります。メッセージがHTTPレスポンスコードの標準リストに適合しなかったことを意味します。
サーバーが原因であるか、PHPアプリケーションやWordPressサイトで使用されているプラグインなど、サーバー上のものが原因である可能性があります。
修正するための不適切なエラーコードのソースが見つからない方は、サポートまでお問い合わせください。
Cloudflareを再度有効にする
エラーが再発するかどうかを確認します。再びエラーが表示される場合は、Cloudflareを無効のままにして、引き続きトラブルシューティングを行います。
520エラーが解消されている場合は、Cloudflareを再度有効にします。
ステップ1
Cloudflareにログインします。アカウント内で雲のアイコンをグレーにしてCloudflareを無効化した場合は、まず一覧から対象のサイトを選択します。

ステップ2
「DNS」>「レコード」に移動し、該当のレコードの右にある「編集」して展開し、グレーの雲のアイコンの横にあるトグルをクリックして、Cloudflareを再度有効にします。

一時停止したCloudflareを再開する
ステップ1
Cloudflareを一時停止している場合は、Cloudflareにログインし、ダッシュボードに表示されている対象のサイトをクリックして再開します。

ステップ2
そのまま「概要」ページを下にスクロールして、「高度な操作」セクションの「Cloudflare を有効にする」をクリックします。

開発モードをオフにする
ステップ1
Cloudflareの開発モードに切り替えていた場合は、開発モードをオフにします。例によってログイン後、該当のサイトを選択します。

ステップ2
「Caching」>「構成」に移動します。

ステップ3
「開発モード」までしたにスクロールし、トグルをオフにします。

それでも解決しない場合
まとめ
520エラーはCloudflareのエラーとして表示されるため分かりにくいことがありますが、実際にはサーバー側の問題が原因で、Cloudflareがオリジンサーバーに正常に接続できない場合に発生します。
今回ご紹介した手順は、520エラーの一般的な原因に対する主な解決策です。これらを実践してもエラーが解決しない場合は、Cloudflareまたはご利用中のサーバーに問い合わせてください。