トラブルシューティングサイトへの情報収集
トラブルシューティングサイトへの情報収集
Cloudflare サポートを一緒に問題の診断やトラブルシューティングを円滑に進めるためのデータ収集方法をご紹介します。Cloudflareは、トラブルシューティングの際、HARファイルの生成から着手することを強くお勧めしています。
本記事の内容
- 概要
- HARファイルを生成する
- あなたのリクエストにお応えできるCloudflareデータセンターを特定する
- cURLコマンドでリクエストをトラブルシューティングする
- Cloudflareを一時的に停止する
- tracerouteを実行する
- ログにCF-RAY ヘッダーを追加する
- 関連リソース
概要
できる限り多くの情報を手に入れることが、問題を診断するため、そして Cloudflare サポートに適切な詳細を提供するために重要となります。この記事は、通常Cloudflare サポートから提示をお願いするトラブルシューティング情報をどう収集するかを説明するためのものです。
HARファイルを生成する
HTTアーカイブ(HAR)は、リクエストヘッダー、レスポンスヘッダー、本文コンテンツ、ページの読み込み時間を含め、全てのWebブラウザ要求を記録しています。
現在、デフォルトでHAR機能にアクセスできるのは、ChromeとFirefoxだけです。他のブラウザは、ブラウザ拡張機能が必要であるか、HARの生成ができません。ブラウザ拡張機能をインストールする際、拡張機能プロバイダーの指示にしたがってください。
1. ブラウザページで、画面上の任意の場所で右クリックをし、「Elementを検証する」(Inspect Element)を選択します。
2. デベロッパーツールがブラウザの下部か左側に表示されます。「ネットワーク」(Network)タブをクリックします。
3. 「ログを保存する」(Preserve log)を確認します。
4. 記録をクリックします。
5. 問題の原因となったURLを表示します。問題が発生したら、「ネットワーク」(Network)タブ内のどの項目でも右クリックし、「コンテンツを含めてHARとして全て保存する」(Save all as HAR with Content)を選択します。
6. サポートチケットにHARファイルを添付します。
1. アプリケーションメニューから、Tools(ツール)>Web Developer(Webデベロッパー)>Network(ネットワーク)次の順に選択します。または、Ctrl+Shift+I (Windows/Linux) か Cmd+Option+I (OS X)を押します。
2. 問題の原因となったURLを表示します。
3. 問題を複製した後、右クリックし、HARとして全てを保存する(Save All As HAR)を選択します。
1. デベロッパーツール(ショートカットは_F12_)に移動し、「ネットワーク」タブを選択します。
2. 問題の原因となったURLを表示します。
3. 問題を複製してから、「HARとしてエクスポートする」(Export as HAR)の後に「名前を付けて保存する」(Save As…)をクリックします。
1. Safariでは、ブラウザウィンドウの上部にあるDevelop(デベロップ)メニューが表示されることを確認します。表示されない場合は、Safari > 環境設定(Preference) > 詳細設定(Advanced) へ進み、メニューバーでデベロッパーメニューの表示を選択します。
2. デベロップする > Webインスペクターの表示へと移動します。
3. 問題の原因となったURLを表示します。
4. Webインスペクター内のリソースをCtrlキーを押しながら、Export HAR(HARをエクスポートする)をクリックします。
あなたのリクエストにお応えできるCloudflareデータセンターを特定する
データセンターのマップが
Cloudflareステータスページに一覧化され、大陸別に分類されています。データセンター名の三文字のコードは、最も近い、主要な国際空港の
IATA codeです。 http://``_www.example.com_``/を確認して、あなたのブラウザに対するリクエストを提供するCloudflareデータセンターを決定してください。
www.example.com をあなたのドメインとホスト名に置き替えてください。出力結果からのcoloフィールドに注意してください。
cURLコマンドでリクエストをトラブルシューティングする
cURLは、HTTP/HTTPSリクエストを送信するためのコマンドラインツールで、トラブルシューティングに便利です。
- HTTP/HTTPSのパフォーマンス
- HTTPエラーレスポンス
- HTTPヘッダー
- API
- サーバー/プロキシレスポンスの比較
- SSL証明書
次のコマンドを実行し、ウェブサイトに標準HTPP GETリクエストを送ります。( www.example.com をあなたのドメインとホスト名に置換えてください):
curl -svo /dev/null http://www.example.com/
この例のcURLコマンドはHTTPレスポンスヘッダーとリクエストヘッダーの詳細を示す出力を返しますが、ページボディの出力は処分してしまいます。cURL出力は、HTTPレスポンスとCloudflareがサイトのために現在、トラフィックをプロキシしているかどうかを確認します。レスポンスのCF-RAYヘッダーの存在により、Cloudflareを介して、リクエストがプロキシされたと確認されます:
CF-Ray: 5097b5640cad8c56-LAX
HTTPエラー、パフォーマンス、キャッシュ、SSL/TLS 証明書のトラブルシューティングに関するヒントについては、下のセクションを展開してください:
Cloudflareからのレスポンスが原因のHTTPエラーをトラブルシューティングする際は、あなたのオリジンWebサーバーに直接リクエストを送ったことで、オリジンがエラーを引き起こしてしまったかどうかをテストします。HTTPエラーをトラブルシューティングするには、あなたのオリジンWebサーバー IPアドレスに直接cURLを実行します(Cloudflareのプロキシをバイパスして):
curl -svo /dev/null http://example.com --connect-to ::203.0.113.34
cURLは、 -w_または--write-out_ cURL オプションを介して、HTTP/HTTPSリクエストのレイテンシーまたは性能低下を測定します。この例のcURLは、TLSハンドシェイクの長さ、DNSルックアップ、リダイレクト、転送などのリクエスト転送で、いくつかのパフォーマンスベクトルを測定します:
curl -svo /dev/null https://example.com/ -w "\nContent Type: %{content_type} \ \nHTTP Code: %{http_code} \ \nHTTP Connect:%{http_connect} \ \nNumber Connects: %{num_connects} \ \nNumber Redirects: %{num_redirects} \ \nRedirect URL: %{redirect_url} \ \nSize Download: %{size_download} \ \nSize Upload: %{size_upload} \ \nSSL Verify: %{ssl_verify_result} \ \nTime Handshake: %{time_appconnect} \ \nTime Connect: %{time_connect} \ \nName Lookup Time: %{time_namelookup} \ \nTime Pretransfer: %{time_pretransfer} \ \nTime Redirect: %{time_redirect} \ \nTime Start Transfer: %{time_starttransfer} \ \nTime Total: %{time_total} \ \nEffective URL: %{url_effective}\n" 2>&1
このタイミング出力の説明は、Cloudflareのブログで読むことができます。
cURLはキャッシングに影響するHTTPレスポンスヘッダーの確認に役立ちます。特に、Cloudflareキャッシングをトラブルシューティングする際に、HTTPヘッダーをいくつか見直してください。
- CF-キャッシュ-ステータス
- Cache-control/Pragma
- Expires
- Last-Modified
- S-Maxage
cURLと証明書を確認する
次のcURLコマンドは、HTTPSリクエスト中にCloudflareが提供するSSL証明書を示しています。( www.example.com をあなたのドメインとホスト名に置換えてください):
curl -svo /dev/null https://www.example.com/ 2>&1 | egrep -v "^{.*$|^}.*$|^\* http.*$"
(インストール済みと仮定して)オリジン証明書を表示するには、下記の_203.0.113.34_ を実際のオリジンWebサーバー IPアドレスに置換えて、 www.example.com をあなたのドメインとホスト名に置き換えてください:
curl -svo /dev/null https://www.example.com --connect-to ::203.0.113.34 2>&1 | egrep -v "^{.*$|^}.*$|^\* http.*$"
TLS バージョンをテストする
ブラウザサポートをトラブルシューティングをする場合、またはTLSバージョンがサポートされていることを確認する場合、次のオプションのうち一つをcURLに追加すると、cURLを使った特定のTLSバージョンをテストすることができます。
- --tlsv1.0
- --tlsv1.1
- --tlsv1.2
- --tlsv1.3
Cloudflareを一時的に停止する
Cloudflareを一時停止させ、Cloudflareのリバースプロキシではなく、オリジンWebサーバー に直接トラフィックを送信します。SSLやWAFなどのCloudflareサービスは、一時停止になったドメインに対して有効になりません。Cloudflareをグローバルに一時停止させる代わりとして、CloudflareDNSアプリでトラフィックを受け取る記録を グレイクラウドする方法があります。
Cloudflareを一時的に停止するために:
- Cloudflareのダッシュボードにある「概要」タブに移動します。
- 「詳細アクション」のページ右下部にある「このサイトでCloudflareを一時停止する」をクリックします。
tracerouteを実行する
Tracerouteはネットワーク診断ツールで、ネットワーク全体でパケットのルートレイテンシーを測定します。ほとんどのオペレーティングシステムが、_traceroute_コマンドをサポートしています。Cloudflareでプロキシされたウェブサイトで接続の問題が発生し、 Cloudflareサポートにサポートを依頼する場合、tracerouteからの出力を提供するようにしてください。
違うオペレーティングシステムでTracerouteを実行するには、下記の手順を確認してください。次の例で、_ www.example.com_をあなたのドメインとホスト名に置き換えてください:
1. Start(スタート)メニューを開きます。
2. Run(実行)をクリックします。
3. コマンドラインインターフェイスを開くには、cmd を入力してからOKをクリックします。
4. コマンドラインプロンプトで、次を入力します: IPv4には -
> tracert www.example.com
IPv6には -
> tracert -6 www.example.com
5. Enter(入力)を押します。
6. 結果をコピーして、ファイルに保存することも他のプログラムにペーストすることもできます。
1. ターミナルウィンドウを開きます。
2. コマンドラインプロンプトで、次を入力します。
IPv4 -
> traceroute www.example.com
IPv6には -
> traceroute -6 www.example.com
3. 結果をコピーして、ファイルに保存することも他のプログラムにペーストすることもできます。
- Network Utility (ネットワークユーティリティ)アプリケーションを開きます。
- Traceroute タブをクリックします。
- 使用するインプットフィールドに_ドメイン_ 、または _IP アドレス_を入力し、「Trace」(トレース)を押します。
- 結果をコピーして、ファイルに保存することも他のプログラムにペーストすることもできます。
また、Mac OSの端末プログラムを使用するときは上記のLinuxでのtraceroute手順と同じようにしたがってください。
ログにCF-RAY ヘッダーを追加する
CF-RAYヘッダーがCloudflareのネットワークを通じてウェブサイトリクエストをトレースします。問題をトラブルシューティングする際、CloudflareサポートにウェブリクエストのCF-RAY を提供してください。あなたのウェブサーバーのブランドに対応する、下記のスニペットでオリジンWebサーバーの設定を編集すると、CF-RAYをログに追加することも可能です。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" %{CF-Ray}i" cf_custom
log_format cf_custom '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" ' '$http_cf_ray';