14. Apache(Webサーバー)のインストールと設定
この章では、Oracle Linux 8でApacheをインストールする手順を説明します。
Apache(アパッチ)は、古くから存在するWebサーバーです。後初のNginx(エンジンエックス)の方が、高負荷に強いと言われていますが、そこまでアクセスがあったら、先に回線がダウンするので、扱いなれているApacheを採用しました。
現時点では、この設定では暗号化通信に対応していないため、通信内容が途中経路の人には丸見えになります。
一応、一部コンテンツにパスワードロックをかける設定も試しますが、破られてもいいパスワードと、盗み見られても問題ない内容のみ、公開してください。
なお、先にSSHサーバーを設置し、WinSCPなどを用いて、Windowsマシンから転送した設定ファイルを上書きする場合、後述する章で説明している、セキュリティコンテキストを変更しないと、Apacheが読み込めず、再起動時にエラーになります。あまり長い編集作業はありませんから、ここは、素直にvimコマンドを使って、サーバー上で編集してください。セキュリティコンテキストの詳細は、参考書を見てください。
以下のコマンドで、Apacheをインストールします。
sudo dnf -y install httpd
以下のコマンドで起動し、システム起動時にも自動起動するようにします。
sudo systemctl start httpd
sudo systemctl enable httpd
ファイアーウォールの設定を変更し、HTTPポートを開きます。
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --reload
適当なテストページを置いて起動確認したい場合は、以下のコマンドで、テストページを張り付けます。
sudo cp /usr/share/httpd/noindex/index.html /var/www/html/index.html
長いコマンドになっていますが、タブキーを駆使して、bashの補完機能を使って頑張ってください。
テストページを確認するためには、Windowsのサーバーマシンなどからブラウザを開き、URLにwww.example.netと入力します。「Apache2 Test Page」というやつが表示されていたら、成功です。

Apacheの設定ファイルを編集します。
sudo vim /etc/httpd/conf/httpd.conf
90行目あたりを、以下のように書き換え、管理者のメールアドレスを登録します。
変更前
#ServerAdmin root@localhost
変更後
#ServerAdmin root@localhost
ServerAdmin oluser@example.net
この時のメールアドレスは、有効なものであれば何でも構いません。
100行目あたりを、以下のように書き換え、正しいURLを入れます。
変更前
ServerName www.example.com:80
変更後
#ServerName www.example.com:80
ServerName www.example.net
ちなみに、初期設定の最後の:80の部分は、HTTP通信のポート番号です。特に設定しなくても動きますし、その場合は、45行目あたりの「Listen 80」の値が採用されます。
基本的な変更は、これだけです。ファイルを保存して、vimを終了しましょう。
Apacheを再起動して、ステータスを見ます。
sudo systemctl restart httpd
sudo systemctl status httpd
この程度の設定では、エラーはまずないと思いますが、表示されたステータスを見て確認します。
次に、パスワードの入力が必要なディレクトリの設定例を示します。参考書と同じ設定にするので、詳しくは参考書を参照してください。
繰り返しになりますが、現時点では暗号化通信に対応していません。よって、ここで設定したパスワード情報は、暗号化していない状態(平文といいます)でインターネットを流れます。なので、破られてもいいパスワードと、盗み見られてもいい内容だけを、公開するようにしてください。
パスワードロックをかけるディレクトリを作ります。
sudo mkdir /var/www/html/private-area
この、private-areaの部分は、好きな名前で構いません。変更した場合は、この部分を置き換えて読んでください。
設定ファイルを作ります。
sudo vim /etc/httpd/conf.d/auth.conf
この、最後のauth.confのファイル名は、実は.confで終わっていれば、何でも構いません。Apacheの設定で、このディレクトリに置かれた、*.confファイルは、すべて読み込まれるようになっています。
以下のように内容を書き込みます。
<Directory "/var/www/html/private-area">
AuthType Basic
AuthName "Private Area"
AuthUserFile /etc/httpd/conf.d/htpasswd
Require valid-user
</Directory>
これは、BASIC認証と言われる方法でロックするものです。「AuthName "Private Area"」の部分のPrivate Areaは、認証の際にダイアログボックスに表示されるメッセージです。好きなものに置き換えてもらって構いません。
「AuthUserFile /etc/httpd/conf.d/htpasswd」の部分は、これから作る認証用のユーザーのパスワードファイルです。ファイル名を変更して作った場合は、/etc以下の部分を書き換えてください。
認証用のパスワードファイルを作ります。ここでは、oreoreというログイン名で作ります。
なお、Oracle Linux 8のユーザーとは、全く関係のないものにしましょう。ここでOracle Linux 8のログインユーザー名とパスワードを指定してしまいますと、それがインターネットに流れてしまうため、非常に危険です。
sudo htpasswd -c /etc/httpd/conf.d/htpasswd oreore
-cオプションは、このファイルが存在しないときに付けます。
Apacheを再起動して、ステータスを表示し、エラーがないかチェックします。
sudo systemctl restart httpd
sudo systemctl status httpd
エラーがあったらステータスに表示されますので、それを見て直します。
実は、次のコマンドでも設定ファイルの構文チェックはできます。
httpd -t
sudoを先頭に付けなくても動作します。
Syntax OK
と表示されれば、エラーはありません。
ただ、先に書いた方法でステータスを確認するほうが、詳細な情報が表示されるため、私は再起動して確認していました。再起動する方法では、英語がずらずらっと表示されますので、英語をあまり見たくないという人は、httpd -tの方法でチェックしたほうがいいかもしれません。
なお、参考書ではhtpasswdのアクセス権を600にしたほうが良いと、下方向の注意書きにありますが、これをするとインターナル・エラーが表示されます。
これは、Apacheの本体はrootユーザーで動作していますが、個々の閲覧に対しては、もっと権限の低いユーザーで動作するためだと思われます。なので、ファイルの所有ユーザーを変更してから、パーミッションを変更します。
参考書に書いてあるとおり、パスワードファイルは、本人しか読めないようにするのが普通です。そうしないと、不正侵入された時にパスワードファイルが何度でも読めるようになるため、総当たりでパスワードを破ることもできてしまうからです。
よって、Apacheの子プロセス(本体から分岐した子供プログラムと考えてください)のユーザーを調べ、そのユーザーに所有者を変えてしまえば、本人だけが読める状態でも動きます。以下にその手順を書きます。
まず、Apacheの子プロセスの名前を調べます。
ps aux | grep httpd
私の環境では、以下のように表示されました。
root 1060 0.0 0.1 272396 10808 ? Ss 8月19 0:00 /usr/sbin/httpd -DFOREGROUND
apache 1071 0.0 0.1 287252 8268 ? S 8月19 0:00 /usr/sbin/httpd -DFOREGROUND
apache 1073 0.0 0.1 2524724 13916 ? Sl 8月19 0:01 /usr/sbin/httpd -DFOREGROUND
apache 1074 0.0 0.1 2524724 11836 ? Sl 8月19 0:01 /usr/sbin/httpd -DFOREGROUND
apache 1075 0.0 0.1 2721388 13828 ? Sl 8月19 0:01 /usr/sbin/httpd -DFOREGROUND
apache 2841 0.0 0.2 2590260 18052 ? Sl 8月19 0:00 /usr/sbin/httpd -DFOREGROUND
psコマンドの見方は、参考書を見てください。これを見ると、apacheというユーザーで動作していることが、わかります。
apacheユーザーに所有者を変更し、本人だけが読み書きできる状態にします。
sudo chown apache /etc/httpd/conf.d/htpasswd
sudo chmod 600 /etc/httpd/conf.d/htpasswd
Apacheを再起動します。
sudo systemctl restart httpd
このパスワードロックしたページの確認は、ブラウザでURLをwww.example.net/private-areaと指定して開くと、確認できます。
次に、PHPのインストールをします。PHPはWebページ上で動作する、一種のプログラムです。もしPHPを使わないWebページのみを利用するのでしたら、この作業は必要ありません。
PHPをインストールし、Apacheを再起動します。
sudo dnf -y install php
sudo dnf -y install php-fpm
sudo systemctl restart httpd
テストのためのWebページを作ります。
sudo vim /var/www/html/phpinfo.php
以下のように内容を書き込みます。
<?php
phpinfo();
?>
ブラウザで、www.example.net/phpinfo.phpを開き、確認します。PHPのバージョンなどの詳細な内容の表がずらずらっと表示されたら、成功です。成功画面の例は、参考書を見てください。モザイクをかけないといけないところが多すぎて、張り付けるのがめんどくさくなってしまいました。
このWebサーバーは一般公開する予定ですので、このファイルが残っていると、サーバーの様々な情報が筒抜けになるため、確認が済んだら速やかに削除します。
sudo rm /var/www/html/phpinfo.php
JavaScript用に、設定ファイルを少しだけ書き換えます。この設定をしなくても使えるのですが、一応やっておきます。めんどくさい人は、無理に設定しなくても問題ありません。
sudo vim /etc/httpd/conf/httpd.conf
最後に以下の3行を書き加えます。
# for JavaScript
AddType text/javascript .js
AddType text/css .css
最後の行は、実はスタイルシートと呼ばれるものの設定で、JavaScriptとは関係がないのですが、ついでに設定しておきます。
Apacheを再起動し、ステータスを確認します。
sudo systemctl restart httpd
sudo systemctl status httpd
次に、ルーターを設定して、外部インターネットからこのWebサイトが見えるようにします。私の環境での設定例を、一例としてあげておきます。
ブラウザのURLに、192.168.0.254(ルーターのアドレス)を入れて、管理画面を開きます。
"ゲーム&アプリ"ボタンを押します。
"ポート変換"ボタンが押されている状態なのを確認して、以下の作業をします。
グループのところは、”Group01”を選択しても良いのですが、"新規追加"することにします。そうすると、Group02というグループができるので、先述したSSHサーバーとは個別にON/OFFができるようになります。"プロトコル"のところの、"任意のTCPポート"のところを、プルダウンメニューから、"HTTP(TCPポート:80)"を選択します。"LAN側IPアドレス"のところに、192.168.0.2を選択します。"新規追加"ボタンを押して、変更を保存します。

動作確認は、ネカフェなどの外部インターネットからURLにwww.example.netと入力して行ってください。
本当の事を言いますと、実は外部からHTTPリクエストを受け取れるかどうかは、LAN内部からでも確認する方法はあります。しかし、それはポートスキャンといわれる、攻撃の下準備に悪用することもできる、危険なサイトです。ですので、ここでは紹介しません。
どうしても外に出るのがめんどくさかったら、スマホかタブレットのWi-Fi接続を切って、5Gや4G通信している状態で確認してください。