AWSのEC2インスタンス 立てたサーバーにアクセスできなくて、様々な本やサイトで読んでエラーが起きている問題の切り分け方法をザックリまとめてみました。
まだネットワークの知識が浅いので、随時更新していこうと思います。
- 1. クライアント側のネットワーク環境に問題ないか確認する
- 2. ホスト名が解決できるか確認
- 3. pingコマンドでネトワークの疎通を調査する
- 4. telnetコマンドでポート80番に接続する
- 5. 上記の全てを確認して、それでもwebサイトに接続できない時は、アプリケーション内部の問題だと考えられる。
- <追記>
- curlコマンド
- netstat
1. クライアント側のネットワーク環境に問題ないか確認する
(指定のサイト以外は閲覧できるか。など)
2. ホスト名が解決できるか確認
nslookupコマンドやdigコマンドを利用
→DNS解決できなければ、DNS設定もしくはDNSサーバ自体に問題がある可能性。
nsloogupの使い方:
nslookupは、DNSサーバーに問い合わせができるコマンド。
$ nslookup で対話モードに。
対話モードに入ったら、
対話モードで「?」を入力すると全オプションを見れる。
$ nslookup
>yahoo.co.jp
ipアドレスが表示される。
>183.79.135.206
ドメイン名のyahoo.co.jpが表示される。
>?
全オプションを表示
3. pingコマンドでネトワークの疎通を調査する
→pingコマンドが通らなかった場合、途中のネットワークに問題があるかwebサーバがダウンしている可能性が。ただし、ICMPが許可されてないとpingコマンドは使えない。
pingの使い方:
Ctrl + cで停止する。
4. telnetコマンドでポート80番に接続する
telnetコマンドでHTTPのウェルノウンポート番号の80番に接続。
→応答がなければポート80番がセキュリティの設定などによって閉じられている。もしくはApacheなどのHTTPサーバーのプロセスが起動していない、という事が考えられる。
telnetの使い方:
5. 上記の全てを確認して、それでもwebサイトに接続できない時は、アプリケーション内部の問題だと考えられる。
<追記>
curlコマンド
様々なプロトコルを使用してデータ転送を行うことができるコマンド。
HTTPのGETやPOST、HTTOSやFTP、Telnet、SMTP、IMAP、POP3など様々な通信プロトコルをサポートしている。
最近の端末には最初から入っていて、ターミナルですぐにcurlコマンドを使用できる状態だが、入っていない場合はインストールする必要がある。
$ curl --version
でちゃんとバージョン確認できれば入っている。
curlコマンドの使い方:
でそのURLの情報を取得できる。
ポート番号指定
オプション:メソッド変更
$ curl -X (リクエストメソッド) (ドメイン名 or IPアドレス)
例) $ curl -X GET https://www.yahoo.co.jp/
curl についての参考サイト
https://qiita.com/akane_kato/items/34b408336f4ec372b139
netstat
主にTCPの通信状態を調査するコマンド。
通信の状態や通信相手、通信しているプロセス、通信量などの情報を知ることができる。
netstatの使い方:
$ netstat
現在アクティブなTCPコネクションの状態が表示される
状態
Listening 待受状態。
Established TCPコネクションが確立して通信している状態。
オプション
-a 全ての接続を表示
-n ホスト名/IPアドレス等を解決せずに数字で表示
-r ルーティングテーブルを表示
-t tcpに限定する
-u udpに限定する
-i ネットワークインターフェースの情報を表示
-p PIDと各ソケットが属するプログラム名を表示
-l listenしてるもののみ表示
netstat に関する参考サイト
https://www.atmarkit.co.jp/ait/articles/0207/20/news003.html