なぜ”localhostで接続が拒否される”のか？

# 目次
 [1.はじめに](#1.はじめに)
 [2.localhostって？](#2.localhostって？)
 [3.ポート番号って？](#3.ポート番号って？)
 [4.なぜ「localhostで接続が拒否されました。」が発生するのか？](#4.なぜ「localhostで接続が拒否されました。」が発生するのか？)
 [5.おわりに](##-おわりに)
 [参考記事](##-参考記事（ありがとうございました）)

# 1.はじめに
単体開発環境で実行した際に一度はこのようなエラーを見たことはありませんか？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3563615/8f9dcda2-79be-7deb-7b7a-eacc708f2a80.png)

今回、私はPHPの勉強をするために、EclipseとXAMPPをインストールし、
ポートの競合と、正しいポート番号が指定されていないことによるエラーが発生したため、改めてlocalhostとは何か？ポート番号とは何か？について学びなおし記事にすることにしました。

#### エラー発生時の原因をおさらい

* <strong>XAMPPインストール時のポート番号の競合によるエラー</strong>
Xamppをインストールしたデフォルトの状態で、
ApatchとMySQLを起動させた際にポート番号が競合が発生。
>[こちら](https://qiita.com/neneta0921/items/3c2f9ac8ea9b5bcfc6e6)の手順で、
下記の通りポート番号を変更したことにより解消されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672389/c57f7062-c6e8-0730-6f8c-a6ca03ddde92.png)


* <strong>正しいポート番号が指定されていないことによるエラー</strong>
EclipseでPHPファイルを実行した際に、
ブラウザ上で「localhostで接続が拒否されました。」が表示。
原因はEclipseのサーバーの設定がデフォルトのままになっており、
正しいポート番号が指定されていなかったことでした。
:::note info
正しいURL 
http\://localhost:8888/TestPHP/sample.php
:::
:::note alert
誤ったURL（Eclipse実行時のデフォルトの状態）
http\://localhost/TestPHP/sample.php
:::
>参考までに、Eclipseのサーバの設定は下記の手順から確認できます。
「ウィンドウズ」＞「設定」＞「PHP」＞「コード・スタイル」＞「サーバ」を選択　＞　サーバを指定し「編集」



# 2.localhostって？
localhostとは、URLの接続先として、
<strong>自分自身のPCを指定する際のアドレス（IPアドレス）</strong>のことです。
主に、GoogleやEdge、IEなどのブラウザから、自分のPC上に構築したWebサーバーへアクセスする時などに使用します。
例えば、「http\://localhost:80/...」や「http\://localhost:8080/...」などです。

# 3.ポート番号って？
ポート番号とは、localhost:XXXXの末尾にある番号「XXXX」を指します。

ポートはよく「扉（ドア）」に例えられ、イメージとしては下記です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672389/275bb808-94d4-a312-27fb-1d7bdd57d680.png)

ポート番号は、16ビットの整数で0番～65535番まで存在し、
"XXX番は××のデータ用"、"○○○番は決められた範囲内で自由に使ってOK”というように、ドメイン名やIPアドレスなどのインターネット資源を管理する機能である<strong>IANA（Internet Assigned Numbers Authority）</strong>によって管理されています。


#### IANAによるポート番号の管理
| 種類 | 番号の範囲 | IANAでの登録可否・用途|
|:--|:--|:--|
|ウェルノウンポート|0～1023|<strong>IANAで正式に登録されている</strong><br>・TCP/IPやUDPで使用されるポートのうち、各プロトコルやサービスが利用するために予約されている<br>・サービスごとに設定ファイルを編集し、待受のポート番号を変更することも可能|
|レジスタードポート|1024～49151|<strong>IANAで正式に登録されている</strong><br>・特定のアプリケーションなどで使用することになっている|
|ダイナミックポート|49152 ～ 65535|<strong>IANAで正式に登録されていない</strong><br>・ユーザの任意で自由に扱える|

#### 代表的なポートの例　※IANAの最新情報 [こちら](https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml)
| ポート番号 | プロトコル | サービス | 説明 |
|:-:|:-:|:-:|:-:|
| 20 | TCP | FTP | ファイルデータを転送する仕組み |
| 21 | TCP/UDP | FTP |  通信を制御する仕組み |
| 22 | TCP | ssh | 他のコンピュータを遠隔操作するための仕組み<br>（通信途中の情報は全部暗号化する） |
| 23 | TCP | talent | 他のコンピュータを遠隔操作するための仕組み<br>（通信途中の情報は全部暗号化しない） |
| 53 | TCP | DNS | IPアドレスとドメイン名の紐付けする仕組み |
| 80 | TCP | HTTP | インターネット通信 |
| 110 | TCP | POP3 | 電子メール（受信） |
| 143 | TCP | IMAP | 電子メール（受信） |
| 443 | TCP | HTTPS | SSL（暗号化通信）によるHTTP接続 |



# 4.なぜ「localhostで接続が拒否されました。」が発生するのか？
ほとんどの原因は下記の4つが考えられるそうです。
1\. Webサーバーが起動していない
2\. 正しいポート番号が指定されていない
3\. ファイアウォールで接続拒否されている
4\. セキュリティソフトで接続が拒否されている
確認手順は[こちら](https://saisoku-area.com/localhost-%E3%81%A7%E6%8E%A5%E7%B6%9A%E3%81%8C%E6%8B%92%E5%90%A6%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82/)のサイトに詳しく記載されていました。

# 5.おわりに
今回のエラーから、
・localhostとは？ポート番号とは？
・プロキシの設定方法について
・ファイヤーウォールの確認の仕方
・Googleの拡張機能の影響
など様々なこ学ぶことができました。
今後は、ポート番号の競合を防ぐために、使用したポート番号は管理していこうと思います。

## 参考記事（ありがとうございました）
https://saisoku-area.com/localhost-%E3%81%A7%E6%8E%A5%E7%B6%9A%E3%81%8C%E6%8B%92%E5%90%A6%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82/

https://qiita.com/neneta0921/items/3c2f9ac8ea9b5bcfc6e6

https://web.liveon.ne.jp/glossary/port_number/#:~:text=%E3%83%9D%E3%83%BC%E3%83%88%E7%95%AA%E5%8F%B7%E3%81%A8%E3%81%AF%E3%80%81%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88,%EF%BD%9E65535%E7%95%AA%E3%81%BE%E3%81%A7%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82