2026年8月7日

2026年8月7日

WordPressサイトのTCPポート80に接続できないときの確認手順(Apache・Nginx・ファイアウォール)

WordPressのサイトを開こうとして、ブラウザに「接続が拒否されました」(ERR_CONNECTION_REFUSED)や「応答時間が長すぎます」(ERR_CONNECTION_TIMED_OUT)と表示される場合、ブラウザはWebサーバーのTCPポート80(HTTP)に接続できていません。WordPressやPHPが動く前の段階で止まっているので、プラグインやテーマを触っても直りません。

この記事では、Linuxサーバー(Ubuntu・Debian・RHEL系)で動くWordPressを例に、接続がどこで止まっているかを外側から順に確かめる手順を説明します。

HTTPSのサイトでもポート80は使われる

サイトをHTTPSで運用していても、ポート80は次の用途で使われます。

  • http:// で来た読者を https:// へ転送する
  • Let's Encrypt の証明書を HTTP-01 チャレンジで取得・更新する(このチャレンジはポート80で行われます)

ポート80が閉じていると、http:// のURLが開けないだけでなく、証明書の更新に失敗することがあります。

エラーの種類で見当をつける

表示 起きていること 主な原因
ERR_CONNECTION_REFUSED/curl で Connection refused サーバーには届いたが、ポート80で待ち受けているプログラムがない、または拒否された Webサーバーが止まっている・起動に失敗している・別のポートで待ち受けている
ERR_CONNECTION_TIMED_OUT/curl の終了コード 28 応答が返ってこない ファイアウォールやセキュリティグループで遮断されている、DNSが別のIPアドレスを指している
ERR_NAME_NOT_RESOLVED ドメイン名からIPアドレスを引けない DNSの設定
500エラー・白い画面 接続はできている PHPやWordPress側の問題(この記事の対象外)

手順1:ドメインが正しいサーバーを指しているか確かめる

手元のパソコンで、ドメインのIPアドレスを確認します。

dig +short example.com
dig +short www.example.com

表示されたIPアドレスが、WordPressを動かしているサーバーのIPアドレスと一致しているかを確かめます。DNSを変更した直後は、古い情報が残っていることがあります。Windowsでは nslookup example.com で確認できます。

手順2:外から接続を試す

手元のパソコンから、ドメイン名とIPアドレスの両方で接続を試します(203.0.113.10 はサーバーのIPアドレスに置き換えます)。

curl -v --max-time 10 http://example.com/
curl -v --max-time 10 http://203.0.113.10/
  • Connected to … と表示されれば、ポート80までは届いています。問題はWebサーバーの設定やWordPress側です。
  • Connection refused なら手順3へ、10秒待って終了コード28(Connection timed out や Operation timed out など)なら手順5へ進みます。

手順3:Webサーバーが動いていて、ポート80で待ち受けているか確かめる

サーバーにSSHでログインし、Webサーバーの状態と、ポート80で待ち受けているプログラムを確認します。

# Webサーバーの状態(使っているものだけ)
sudo systemctl status apache2   # Debian / Ubuntu の Apache
sudo systemctl status httpd     # RHEL 系の Apache
sudo systemctl status nginx

# ポート80で待ち受けているプログラム
sudo ss -ltnp 'sport = :80'

# サーバー自身から接続してみる
curl -I http://127.0.0.1/

ss の結果の見方は次のとおりです。

  • 何も表示されない:ポート80で待ち受けているプログラムがありません。Webサーバーが止まっているか、起動に失敗しています(手順4へ)。
  • 127.0.0.1:80 だけが表示される:サーバーの中からしか接続できません。待ち受けるアドレスの設定を直します。
  • 0.0.0.0:80 や *:80、[::]:80 が表示される:すべてのアドレスで待ち受けています。サーバー自身からの curl が成功するなら、外からの接続を止めているのはファイアウォールです(手順5へ)。

待ち受けるポートとアドレスは、Apacheでは Listen、Nginxでは listen で決まります。

# Apache(Debian / Ubuntu)
grep -R "^Listen" /etc/apache2/ports.conf /etc/apache2/sites-enabled/
# Apache(RHEL 系)
grep -R "^Listen" /etc/httpd/conf/ /etc/httpd/conf.d/
# Nginx(読み込まれている設定をすべて表示して絞り込む)
sudo nginx -T 2>/dev/null | grep -E '^\s*listen'

Apacheは Listen 80、Nginxは listen 80;(IPv6も使う場合は listen [::]:80; も)になっていれば、すべてのアドレスで待ち受けます。

手順4:Webサーバーが起動しないときはログを見る

sudo journalctl -u apache2 -n 50 --no-pager   # RHEL 系は -u httpd
sudo journalctl -u nginx -n 50 --no-pager

よくある原因は次の2つです。

  • 設定ファイルの書き間違い:sudo apachectl configtest または sudo nginx -t で構文を確認し、表示された行を直します。
  • ポート80を別のプログラムが使っている:ログに Address already in use と出ます。ApacheとNginxを同じサーバーで両方起動しようとした場合によく起きます。手順3の ss コマンドで、どのプログラムがポート80を使っているかを確かめ、使わない方を止めます。
# 例:Apache を止めて Nginx だけを使う場合
sudo systemctl disable --now apache2
sudo systemctl restart nginx

手順5:サーバーのファイアウォールを確かめる

Ubuntuではufw、RHEL系ではfirewalldが使われていることが多いので、使っている方を確認します。firewalldで遮断されている場合は、タイムアウトではなく No route to host と表示されることもあります。

# ufw の場合
sudo ufw status verbose
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# firewalld の場合
sudo firewall-cmd --list-all
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
  • ufwを初めて有効にするときは、先に sudo ufw allow OpenSSH(またはSSHのポート)を許可しておかないと、SSHで入れなくなります。
  • ufwの初期設定では、サーバーから外への通信(outgoing)は許可されています。Webサイトを公開するために、外向きの80番を許可する設定は通常は必要ありません。

手順6:クラウドやVPSのファイアウォールを確かめる

AWS・Google Cloud・Azureなどのクラウドや、多くのVPSには、サーバーの外側にもファイアウォール(AWSではセキュリティグループ、VPSではパケットフィルターなどの名前)があります。サーバーの中で許可していても、ここで閉じていれば外から届きません。

AWS EC2の場合、セキュリティグループにHTTP(TCP 80)の受信を許可するには、管理画面のほか、AWS CLIでも設定できます(sg-0123456789abcdef0 は対象のセキュリティグループのIDに置き換えます)。

aws ec2 authorize-security-group-ingress \
  --group-id sg-0123456789abcdef0 \
  --protocol tcp --port 80 --cidr 0.0.0.0/0

VPSの場合は、事業者のコントロールパネルでWeb(80番・443番)の通信が許可されているかを確認します。

自宅のサーバーで公開している場合は、ルーターのポート転送の設定と、契約している回線で外からの80番への接続が制限されていないかも確認します。

外から見たポートの状態は、nmap でも確認できます(自分が管理するサーバーにだけ使います)。

nmap -Pn -p 80,443 203.0.113.10
nmap の表示 意味
open 接続できる
closed サーバーには届いたが、待ち受けているプログラムがない(手順3・4)
filtered 途中のファイアウォールで遮断されている(手順5・6)

手順7:WordPress側の設定を確かめる

ポート80に接続できるようになっても、WordPressが別のURLへ転送してしまう場合は、WordPressに登録されているURLを確認します。

cd /var/www/html   # WordPress のフォルダー
wp option get home
wp option get siteurl

http://example.com:8080 のようにポート番号が付いていたり、古いドメインやIPアドレスになっていたりすると、そのURLへ転送されます。管理画面に入れる場合は「設定」→「一般」の「WordPressアドレス (URL)」と「サイトアドレス (URL)」で直せます。

また、サイトヘルスのループバックリクエストのテストで cURL error 7(接続できない)や cURL error 28(タイムアウト)が表示される場合は、サーバーが自分自身のドメインに接続できていません。サーバー上で curl -I http://example.com/ を実行し、手順1〜6と同じ順に確認します。

まとめ

  • ERR_CONNECTION_REFUSED はWebサーバーが待ち受けていない、ERR_CONNECTION_TIMED_OUT はファイアウォールで遮断されていることが多い、と見当をつけます。
  • DNS → 外からの接続 → Webサーバーの待ち受け(ss -ltnp)→ 起動ログ → サーバーのファイアウォール → クラウドのファイアウォールの順に確かめます。
  • ApacheとNginxの両方を起動しようとすると、Address already in use でどちらかが起動できません。
  • HTTPSのサイトでも、転送と Let's Encrypt の証明書更新のためにポート80を開けておきます。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲