ポート80の確認とは、Webサーバーが HTTP 経由で外部からアクセス可能かどうかを調べることです。HTTP は、ブラウザが "https://" を付けない通常の URL を開くときにデフォルトで使うプロトコルです。ポート80がブロックされていたり、リッスン状態でなかったりすると、訪問者は接続エラーに直面し、サイトが完全にダウンしてしまいます。ここでは、その診断と修正方法を詳しく解説します。
目次
ポート80の役割
ポート80は、
HTTP (Hypertext Transfer Protocol)
のデフォルト TCP ポートです。ブラウザが
http://example.com
に接続する際、そのサーバーの IP アドレスのポート80を自動的に指定します。Apache、Nginx、IIS、Caddy などのサーバーソフトウェアは、接続を受け付けるためにポート80でアクティブにリッスンしている必要があります。
ポート80は IANA の公式ポートレジストリ に登録されており、RFC 9110 で標準化されています。これは「ウェルノウンポート」と呼ばれるもので、0-1023 番のポートはシステムレベルのサービス向けに予約されており、Linux/macOS でバインドするには昇格した権限が必要です。
ポート80が開いているか確認する方法
ポート80が開いているかどうかを確認する方法はいくつかあります。サーバー上でローカルに確認するか、別のマシンやインターネットからリモートで確認するかによって、適切な手段が異なります。
telnet を使う
telnet は最も手軽な手動テストです。対象ホストへのネットワークアクセスがあるマシンから実行してください。
telnet example.com 80
ポート80が開いていて Web サーバーがリッスンしている場合、空白のカーソルまたは HTTP バナーが表示されます。閉じているかフィルタリングされている場合は "Connection refused" が返るか、タイムアウトするまでコマンドがハングします。
curl を使う
curl はより詳細な情報を得られます。実際の HTTP レスポンスを確認できます。
curl -v http://example.com
-v
フラグは、TCP ハンドシェイクやレスポンスヘッダーを含む詳細な出力を表示します。接続成功時は
* Connected to example.com (93.184.216.34) port 80
が、失敗時は
curl: (7) Failed to connect
が表示されます。
nmap を使う
nmap はポートスキャンの定番ツールです。ポート80を個別にテストするには次のコマンドを使います。
nmap -p 80 example.com
結果は3つの状態のいずれかで表示されます。 open (何かがリッスンしている)、 closed (ポートには到達できるがリッスンしているサービスがない)、 filtered (ファイアウォールがパケットをドロップしており、nmap が状態を判定できない) です。
Windows で PowerShell を使う
Test-NetConnection -ComputerName example.com -Port 80
PowerShell の
Test-NetConnection
はシンプルに
TcpTestSucceeded : True
または
False
を返すため、スクリプト化が容易です。Windows でのポート確認の詳しい手順については、
Windows でオープンポートを確認する方法
をご覧ください。
netstat でポート80を調べる
サーバー上で直接作業している場合、
netstat
を使うとポート80にバインドされているプロセスを正確に確認できます。「このマシンのポート80で実際に何かがリッスンしているか?」という問いに答えるための適切なツールです。
Linux / macOS
sudo netstat -tlnp | grep :80
各フラグの説明:
-
-t- TCP 接続のみ表示 -
-l- リッスン中のソケットのみ表示 -
-n- 数値アドレスで表示 (DNS ルックアップをスキップするため高速) -
-p- プロセス名と PID を表示
典型的な出力例は
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1234/nginx
のようになります。これは nginx (PID 1234) がすべてのインターフェースのポート80でリッスンしていることを示しています。
最近の Linux システムでは、
ss
の方が高速で
netstat
より推奨されます。
sudo ss -tlnp | grep :80
Windows
netstat -ano | findstr :80
このコマンドはポート80に関連するすべての接続と PID を一覧表示します。PID (例: PID 4892) からプロセス名を調べるには次のコマンドを使います。
tasklist /fi "pid eq 4892"
ファイアウォールによるポート80のブロックを診断する
ファイアウォールによるブロックは、ローカルで Web サーバーが正常に動作しているにもかかわらず、外部からポート80が閉じているように見える最も一般的な原因です。ブロックが発生し得る箇所は3つあります。
| レイヤー | 確認場所 | ツール |
|---|---|---|
| OS ファイアウォール (サーバー) | iptables / ufw (Linux)、Windows Defender ファイアウォール |
iptables -L -n
または Windows ファイアウォールルール
|
| クラウドセキュリティグループ | AWS EC2 セキュリティグループ、Azure NSG、GCP ファイアウォールルール | クラウドコンソールのインバウンドルール |
| ネットワーク/ISP ファイアウォール | ルーター ACL、ISP による住宅向けポートブロック | ISP に問い合わせるか外部ポートスキャナーを使用 |
Linux で iptables を確認する
sudo iptables -L INPUT -n -v | grep 80
ポート80に対する DROP または REJECT ルールが表示された場合、それが原因です。ufw でポート80を許可するには次のコマンドを実行します。
sudo ufw allow 80/tcp
sudo ufw reload
AWS セキュリティグループを確認する
サーバーが EC2 上にある場合、EC2 コンソールからセキュリティグループのインバウンドルールを確認してください。
0.0.0.0/0
(または特定の IP 範囲) からの TCP ポート80を許可するルールが必要です。このルールがないと、すべてのポート80トラフィックが OS ファイアウォールに到達する前にドロップされます。
Linux 側のポート診断についてより詳しく知りたい場合は、 Linux でオープンポートを確認する完全ガイド で iptables、ufw、firewalld、nftables について詳しく解説しています。
HTTP ポートが応答しない場合の原因と対処法
HTTP ポートが応答しない場合、問題は次のいずれかに分類されます。
-
Web サーバーが起動していない
-
systemctl status nginxまたはsystemctl status apache2で確認してください。停止している場合はsudo systemctl start nginxで起動します。 -
Web サーバーが起動時にクラッシュしている
- ログを確認してください:
sudo journalctl -u nginx --since "10 minutes ago"。設定ファイルの構文エラーやポートの競合がここに記録されます。 -
サーバーが localhost のみにバインドされている
- サーバーの設定が
listen 0.0.0.0:80ではなくlisten 127.0.0.1:80になっている場合、外部からの接続を受け付けません。サーバー設定でバインドアドレスを修正してください。 - ポート80が既に使用中 - 別のプロセスが Web サーバーより先にポート80を取得しています。netstat で特定し、そのプロセスを停止するかどちらかのサービスを別ポートに変更してください。
-
SELinux または AppArmor がバインドをブロックしている
- RHEL/CentOS 系のシステムでは、SELinux が標準外のプロセスによるポート80へのバインドを拒否することがあります。
ausearch -m AVC -ts recentで拒否ログを確認してください。
curl http://127.0.0.1
を実行してください。これが成功するのに外部からの接続が失敗する場合、問題は Web サーバー自体ではなくファイアウォールまたはネットワークルールにあります。
外部ネットワークからポート80の接続をテストする
自分のマシンからテストすると、サーバーと同じ LAN 上にいる場合に外部トラフィックに適用されるファイアウォールルールを迂回してしまい、正確な結果が得られないことがあります。実際の訪問者と同じ条件でポート80の接続をテストするには、外部からのテストが必要です。
当サイトの HTTP ヘッダーチェッカーツール を使えば、外部からサーバーの HTTP レスポンスヘッダーを確認できます。URL を入力するだけで、ステータスコード、サーバーの種類、リダイレクトチェーンなど、ブラウザが受け取る情報を外部の視点からそのまま確認できます。
その他の外部テスト方法:
- オンラインポートスキャナー - portchecker.co や canyouseeme.org などのサイトで IP アドレスとポート番号を入力すると、そのサーバーから接続テストを実行できます。
-
VPS またはクラウドシェルから
- 別のリージョンに無料枠のクラウドインスタンスを起動して、そこから
nc -zv your-server-ip 80を実行します。 -
ローカルで nc (netcat) を使う
-
nc -zv example.com 80で、ほとんどの Linux/macOS 環境に追加インストール不要で素早くオープン/クローズを確認できます。
ポート80とポート443 - それぞれが重要な場面
ポート443は HTTPS (TLS による暗号化 HTTP) を処理します。最近のサイトの多くはポート80へのトラフィックをすぐにポート443へリダイレクトしています。それでもポート80が重要な理由はいくつかあります。
- ACME / Let's Encrypt の HTTP-01 チャレンジ - Let's Encrypt の certbot はポート80を使ってドメインの所有権を検証します。ポート80がブロックされていると、証明書の発行に失敗します。
- TLS を使わない内部サービス - 多くの内部ツール、監視エージェント、マイクロサービスはプライベートネットワーク内でポート80上のプレーン HTTP で通信します。
- レガシークライアントと IoT デバイス - 一部の組み込みデバイスや古いクライアントは TLS に対応しておらず、ポート80に依存しています。
- リダイレクトインフラ - すべてのコンテンツを HTTPS で配信している場合でも、HTTP リクエストをキャッチしてリダイレクトするためにポート80を開けておく必要があります。そうしないと、ユーザーは接続エラーに直面します。
ポート80が実際に何を返しているかをすぐに確認
HTTP ヘッダーチェッカーは任意の URL からライブレスポンスを取得し、ポート80が開いているかどうかの確認、リダイレクトチェーンの確認、サーバーが返す正確なステータスコードの確認をコマンドライン不要で行えます。
HTTP ヘッダーを今すぐ確認する →
Linux では
sudo ss -tlnp | grep :80
または
sudo netstat -tlnp | grep :80
を実行します。どちらのコマンドもポート80にバインドされているプロセス名と PID を表示します。Windows では
netstat -ano | findstr :80
で PID を取得し、
tasklist /fi "pid eq [PID]"
でプロセス名を確認します。よく見られるプロセスとしては nginx、apache2、IIS、Node.js サーバーなどがあります。
同じ netstat または ss コマンドで8080をフィルタリングします。Linux では
sudo ss -tlnp | grep :8080
、Windows では
netstat -ano | findstr :8080
を使います。ポート8080は開発サーバー、Tomcat、Jenkins、プロキシなどでよく使われる代替 HTTP ポートです。既に何かがバインドされている場合は、そのプロセスを停止するか、新しいサービスを別のポートで起動するよう設定変更が必要です。
専用 Web サーバーや VPS インスタンスでは、ポート80は通常開いており、開いていることが前提とされています。一方、住宅向けインターネット接続では、自宅サーバーによる公開ホスティングを防ぐため、多くの ISP がインバウンドのポート80をブロックしています。クラウドインスタンスでは、インバウンドルールを明示的に追加するまでセキュリティグループでポート80がデフォルトでブロックされていることが多いです。
サーバーの外部からは
nmap -p 80 your-server-ip
または
telnet your-server-ip 80
を使います。サーバー上では
ss -tlnp | grep :80
でリッスン中のサービスがあるか確認します。ファイアウォールルールも確認してください。Linux で ufw を使っている場合は
sudo ufw status
を実行して、ポート80が許可済みとして表示されるか確認します。
Linux で ufw を使う場合:
sudo ufw allow 80/tcp
。iptables を直接使う場合:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
。Windows では Windows Defender ファイアウォールで TCP ポート80のインバウンドルールを追加します。クラウドサーバーの場合は、セキュリティグループまたはネットワークセキュリティグループで、対象のソース範囲からの TCP ポート80を許可するインバウンドルールを追加してください。
ポート80は、Web サーバーが HTTP トラフィックを提供するよう設定されている場合に開きます。これは公開 Web サイトの標準的な構成です。また、HTTP から HTTPS (ポート443) へリダイレクトするサーバーでも、リダイレクト自体がポート80への接続受け付けを必要とするため、ポート80は開いたままになります。Let's Encrypt の certbot などの証明書更新ツールも、HTTP-01 ドメイン検証チャレンジにポート80を必要とします。
Windows Defender ファイアウォール (詳細設定) を開き、「受信の規則」から「新しい規則」をクリックします。「ポート」を選択し、TCP を選んでローカルポートに80を入力、「接続を許可する」を選択し、すべてのプロファイル (ドメイン、プライベート、パブリック) に適用して規則に名前を付けます。または、管理者権限の PowerShell プロンプトで次のコマンドを実行します:
New-NetFirewallRule -DisplayName "HTTP Port 80" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow
。
はい、Linux と macOS では、ポート80は特権ポートです (0-1023 番のポートにバインドするには root 権限または CAP_NET_BIND_SERVICE ケーパビリティが必要です)。つまり、通常のユーザープロセスは昇格した権限なしにポート80でリッスンできません。nginx や Apache などの Web サーバーは通常 root としてポート80にバインドするために起動し、その後リクエスト処理のために権限の低いユーザーに切り替えます。Windows にはポート80に対するこのような制限はありません。
ポート80 (HTTP) は、TLS が不要または実用的でない場面で使われます。例えば、信頼済みプライベートネットワーク上の内部マイクロサービス、ローカル開発環境、TLS 非対応の IoT デバイスなどです。また、Let's Encrypt の HTTP-01 証明書チャレンジにもポート80が必要です。公開サイトでは TLS を使ったポート443が強く推奨されており、ポート80はリダイレクト用途のみに開けておくのが一般的です。
いいえ、異なるポートです。ポート80は IANA が HTTP の標準として割り当てたポートで、ポートを指定しない場合にブラウザが自動的に使用します。ポート8000は非公式の代替ポートで、開発サーバーでよく使われます。Python の
python -m http.server
や Django の開発サーバーはデフォルトでポート8000を使用します。ポート8000のサービスにアクセスするには、URL に明示的にポートを指定する必要があります:
http://example.com:8000
。