Server

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のテスト

 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を選択します。"新規追加"ボタンを押して、変更を保存します。

Apache用ルーター設定

 動作確認は、ネカフェなどの外部インターネットからURLにwww.example.netと入力して行ってください。

 本当の事を言いますと、実は外部からHTTPリクエストを受け取れるかどうかは、LAN内部からでも確認する方法はあります。しかし、それはポートスキャンといわれる、攻撃の下準備に悪用することもできる、危険なサイトです。ですので、ここでは紹介しません。

 どうしても外に出るのがめんどくさかったら、スマホかタブレットのWi-Fi接続を切って、5Gや4G通信している状態で確認してください。