
Apacheサーバーのデフォルトページが表示されない
背景
さくらのVPSサービスを利用してUbuntuサーバーを借り、そこにApacheをインストールしWebサーバーを構築しました。サーバーのIPアドレスがaaa.bbb.ccc.dddで設定されていたので、外部から「http://aaa.bbb.ccc.ddd/」にアクセスしてデフォルトページを表示しようとした際に、問題が発生しました。Apacheのインストールには以下の二つの記事を参考にしました。
問題
Apacheウェブサーバーのデフォルトページが表示されない。

デフォルトページというのは以下のように、Apacheに何も設定を加えていない状態でとりあえず表示されるページのことです。

通常は、デフォルトページが表示されることでサーバーが外部からアクセス可能であることを確認します。その後、Apacheの設定ファイル(例えばapache2.conf)をvimなどのテキストエディタで編集し、自分のアプリケーションにアクセスできるよう設定を行います。
しかし、私の場合そのデフォルトページすら表示されませんでした。
そこで私は以下のことが原因であると考えました。
原因:ファイヤーウォールの設定
ファイヤーウォールの設定で外部からのアクセスができなくなっているのではと考えました。
以下のコマンドでファイヤーウォールの設定ステータスを確認しました。
sudo ufw status verbose
すると出力結果は以下のようになりました。
ubuntu@tk2-212-15506:/var/log/apache2$ sudo ufw status verbose
Status: inactive
そもそもファイヤーウォールは設定されていなかったのです。
この段階でファイアウォールが原因ではないと考えましたが、一応の確認として、Webアクセスに必要なポート番号22(SSH用)、80(HTTP用)、443(HTTPS用)をファイアウォールで開放しました。その後、もう一度「http://aaa.bbb.ccc.ddd/」にアクセスを試みましたが、ページは依然として表示されませんでした。
原因:そもそもApacheウェブサーバーが起動していないのでは
以下のコマンドでApacheサーバーの現在の状態を調べました。
sudo systemctl status apache2
出力結果は以下のようになりました。
ubuntu@tk2-212-15506:/var/log/apache2$ sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2024-05-08 19:26:41 JST; 1h 9min ago
Docs: https://httpd.apache.org/docs/2.4/
Process: 5152 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 5155 (apache2)
Tasks: 55 (limit: 4578)
Memory: 5.0M
CPU: 293ms
CGroup: /system.slice/apache2.service
├─5155 /usr/sbin/apache2 -k start
├─5156 /usr/sbin/apache2 -k start
└─5157 /usr/sbin/apache2 -k start
May 08 19:26:41 tk2-212-15506 systemd[1]: Starting The Apache HTTP Server...
May 08 19:26:41 tk2-212-15506 systemd[1]: Started The Apache HTTP Server.
丁寧に起動開始時刻付きでActiveと返ってきました。
Apacheサーバーは動作しているようですが、念の為サーバー上でcurlコマンドでレスポンスが返ってくるのか試してみました。
サーバー上のターミナルで以下のコマンドを実行
curl localhost
すると、デフォルトページのhtmlが出力結果として返ってきました。長すぎるのでここでは省略します。
以上から少なくともwebサーバーは起動していると結論しました。
原因:設定ファイルが間違っているのではないか
Apacheインストール後何も設定を加えていないのでないだろうとは思いましたが、念には念を込めて確かめることにしました。
以下は./etc/apache2/sites-available下の000-default.confです。
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
DocumentRootというディレクティブは、ウェブサーバーが静的ファイルを提供するディレクトリを指定します。この設定では /var/www/html がドキュメントルートとして指定されており、このディレクトリ内のファイルがウェブサーバーによって提供されます。
実際にcdコマンドでhtmlフォルダに移動し内容を確認したところ、
ubuntu@tk2-212-15506:/$ cd var/www/html
ubuntu@tk2-212-15506:/var/www/html$ ls
index.html
htmlフォルダ下にはindex.htmlがしっかり存在しました。
catコマンドでindex.htmlを表示したところしっかりデフォルトページでした。
以上から設定ファイルに間違いはないと結論しました。
原因:サーバーがネットにつながっていないのではないか
以下のpingコマンドでネットワーク接続の可用性をテストしました。
ping aaa.bbb.ccc.ddd
以下は出力結果です。
koichi@koxo playground % ping aaa.bbb.ccc.ddd
PING aaa.bbb.ccc.ddd (aaa.bbb.ccc.ddd): 56 data bytes
64 bytes from aaa.bbb.ccc.ddd: icmp_seq=0 ttl=52 time=17.873 ms
64 bytes from aaa.bbb.ccc.ddd: icmp_seq=1 ttl=52 time=15.574 ms
64 bytes from aaa.bbb.ccc.ddd: icmp_seq=2 ttl=52 time=15.377 ms
64 bytes from aaa.bbb.ccc.ddd: icmp_seq=3 ttl=52 time=17.229 ms
64 bytes from aaa.bbb.ccc.ddd: icmp_seq=4 ttl=52 time=11.956 ms
64 bytes from aaa.bbb.ccc.ddd: icmp_seq=5 ttl=52 time=11.774 ms
64 bytes from aaa.bbb.ccc.ddd: icmp_seq=6 ttl=52 time=15.365 ms
64 bytes from aaa.bbb.ccc.ddd: icmp_seq=7 ttl=52 time=13.169 ms
64 bytes from aaa.bbb.ccc.ddd: icmp_seq=8 ttl=52 time=18.772 ms
64 bytes from aaa.bbb.ccc.ddd: icmp_seq=9 ttl=52 time=17.165 ms
64 bytes from aaa.bbb.ccc.ddd: icmp_seq=10 ttl=52 time=16.206 ms
64 bytes from aaa.bbb.ccc.ddd: icmp_seq=11 ttl=52 time=15.954 ms
64 bytes from aaa.bbb.ccc.ddd: icmp_seq=12 ttl=52 time=17.165 ms
64 bytes from aaa.bbb.ccc.ddd: icmp_seq=13 ttl=52 time=18.549 ms
64 bytes from aaa.bbb.ccc.ddd: icmp_seq=14 ttl=52 time=12.831 ms
64 bytes from aaa.bbb.ccc.ddd: icmp_seq=15 ttl=52 time=12.389 ms
64 bytes from aaa.bbb.ccc.ddd: icmp_seq=16 ttl=52 time=13.417 ms
^C
--- aaa.bbb.ccc.ddd ping statistics ---
17 packets transmitted, 17 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 11.774/15.339/18.772/2.269 ms
このpingコマンドの結果は、IPアドレス aaa.bbb.ccc.ddd がネットワーク上で正常に応答していることを示しています。これにより、サーバーがネットワーク上で稼働しており、ネットワーク接続が機能していることが確認できます。パケットロスが0%であり、応答時間も安定しているため、ネットワーク自体には問題がないようです。
以上からサーバーのネットワーク接続には問題はないと結論しました。
原因:DNSの問題
DNSの設定をしておらず、ドメインに対するIPアドレスが対応していないのではないのかと考えました。しかし、検索ではドメインは使用せず(そもそも持っていない)直接IPアドレスを指定しているのでこれが原因ではないと結論しました。
原因:OS壊れたんじゃないか
もう何が何だかわからなかったので、さくらサーバーのコンソール画面からOSの再インストールをして、全て0の状態からやり直しました。Apacheのインストールをし、上記の手順を全てやり直しましたが変わりませんでした。
解決編
後日、サーバーに詳しい友人に聞いたところ3分で原因がわかりました。
原因はVPSのパケットフィルターの設定をしていないことでした。この設定をすることによってご契約中の「さくらのVPS」に対する通信制御を行うことが出来ます。つまり、自分の使っているVPSそのものがweb接続ができないようになっていたのです。
以下は現在のパケットフィルターの設定です。

この設定を見てわかる通り、契約しているVPSそのものにはポート番号22(SSH)の接続しか許可されていませんでした。ここにweb接続に必要なポート番号である80,443を許可するように設定します。
以下設定後です。

その後、IPアドレスに検索をかけたら無事にデフォルトページが表示されました!
11時間かけて遠回りしましたが、この遠回りでサーバー周りの基本知識がついたのでいい経験になりました。サーバー初心者で同じ事象に当たった人に届いてくれれば幸いです。m(_ _)m