CentOS8に仮想ホストでApacheをインストールする方法


Apache Webサーバーは、オープンソースで人気のあるHTTP Webサーバーであり、ホスティング業界で引き続き大きな市場シェアを獲得しています。ほんの数例を挙げると、モジュールの機能強化、マルチプロトコルのサポート、構成の簡素化、多言語のサポートなど、多数の機能が付属しています。

このガイドでは、仮想ホスト環境を使用したCentOS8およびRHEL8へのApacheWebサーバーのインストールについて説明します。このチュートリアルを書いている時点で、Apacheの最新バージョンはApache2.2.43です。

ApacheWebサーバーのインストール

開始するには、最初に次のdnfコマンドを使用してCentOS8またはRHEL8システムパッケージリストを更新します。

$ sudo dnf update

更新が完了したら、次のコマンドを実行してApacheWebサーバーをインストールします。

$ sudo dnf install httpd

インストールしたら、rpmコマンドを実行してApacheのバージョンを確認できます。

$ rpm -qi httpd

このコマンドは、パッケージのバージョン、リリース日、ビルド、アーキテクチャなどの情報の配列を出力します。

Apache HTTP Webサービスを開始するには、systemctlコマンドを実行します。

$ sudo systemctl start httpd

サービスが実行されているかどうかを確認するには、を実行します。

$ sudo systemctl status httpd

出力から、緑色の「アクティブ」ステータスは、ApacheWebサーバーが稼働中であることを示します。

ウェブサーバーが実行されているという疑いを解消するには、図のようにサーバーのIPアドレスまたはドメイン名を参照してApacheにテストページをリクエストします。

http://server-ip  

ifconfigコマンドを実行すると、サーバーのIPを取得できます。サーバーがクラウドでホストされている場合は、curlコマンドを実行してパブリックIPを取得できます。

$ curl ifconfig.me 
OR
$ curl -4 icanhazip.com

サーバーのIPアドレスを参照すると、次のWebページが表示されます。

これは、Webサーバーが実行されていることの確実な確認です。

ApacheWebサーバーの管理

Apacheをインストールして実行すると、systemctl検査ツールを使用してApacheを管理できます。

たとえば、Apacheを停止するには、次のコマンドを実行します。

$ sudo systemctl stop httpd

サービスをもう一度開始するには、次を実行します。

$ sudo systemctl start httpd

構成ファイルのいずれかに変更を加え、変更を適用するために再起動する必要がある場合は、次のコマンドを実行します。

$ sudo systemctl restart httpd

通常、サービスを再起動すると、サービスが中断します。より良い代替策は、接続を中断せずに単にリロードすることです。

$ sudo systemctl reload httpd

起動時または再起動時にApacheWebサーバーを自動的に起動するには、以下のコマンドを実行します。これにより、Apacheがユーザーの介入なしに自動的に起動します。

$ sudo systemctl enable httpd

起動時にサービスを自動的に開始しないことを選択した場合は、以下を実行します。

$ sudo systemctl disable httpd

Apache仮想ホストの設定

デフォルトでは、ApacheWebサーバーは1つのWebサイトのみを提供またはホストするように構成されています。 1つのWebサイトのみをホストする場合は、この手順は必要ありません。ただし、サーバーで複数のドメインをホストする予定の場合は、Apache仮想ホストを構成する必要があります。

仮想ホストは、デフォルトのドメインとは別のドメインをセットアップできるようにする構成を含む別のファイルです。このガイドでは、ドメインcrazytechgeek.infoの仮想ホストを設定します。

デフォルトの仮想ホストは、/var/www/html ディレクトリにあります。これは、単一のサイトでのみ機能します。ドメイン用に別の仮想ホストを作成するには、次に示すように、/var/www ディレクトリ内に別のディレクトリ構造を作成します。

$ sudo mkdir -p /var/www/crazytechgeek.info/html

さらに、ログファイルを保存するためのディレクトリを作成することもできます。

$ sudo mkdir -p /var/www/crazytechgeek.info/log

次に、図のように 環境変数を使用してファイルのアクセス許可を編集します。

$ sudo chown -R $USER:$USER /var/www/crazytechgeek.info/html

また、図のようにwebrootディレクトリの権限を調整します。

$ sudo chmod -R 755 /var/www

次に、図のようにサンプルの index.html ファイルを作成します。

$ sudo vim /var/www/crazytechgeek.info/html/index.html

キーボードの文字 'i' を押して、仮想ホストのテスト時にWebブラウザーに表示されるサンプルコンテンツを図のように貼り付けます。

<html>
  <head>
    <title>Welcome to crazytechgeek.info!</title>
  </head>
  <body>
    <h1>Success! The crazytechgeek.info virtual host is up and perfectly working!</h1>
  </body>
</html>

構成ファイルを保存して終了します。

サンプルのインデックスファイルとサイトディレクトリが作成されたら、次に進んで仮想ホストファイルを作成できます。仮想ホストファイルにはドメインのサイト構成が含まれ、クライアントの要求にどのように応答するかをApacheに指示します。

仮想ホストファイルにはドメインのサイト構成が含まれ、クライアントの要求にどのように応答するかをApacheに指示します。ただし、続行するには、 sites-available ディレクトリと sites-enabled ディレクトリの2つのディレクトリを作成する必要があります。

仮想ホストファイルは sites-available ディレクトリに保存され、 sites-enabled ディレクトリには仮想ホストへのシンボリックリンクが含まれます。

図のように両方のディレクトリを作成します。

$ sudo mkdir /etc/httpd/sites-available
$ sudo mkdir /etc/httpd/sites-enabled

次に、Apache Webサーバーのメイン構成ファイルを変更し、サイトが有効なディレクトリ内の仮想ホストの場所をApacheに指示します。

$ sudo vim /etc/httpd/conf/httpd.conf

構成ファイルの最後に示されているように、行を追加します。

IncludeOptional sites-enabled/*.conf

保存して終了。

次に、次のように仮想ホストファイルを作成します。

$ sudo vim /etc/httpd/sites-available/crazytechgeek.info

以下のコンテンツを貼り付けて、 crazytechgeek.info を独自のドメイン名に置き換えます。

<VirtualHost *:80>
    ServerName www.crazytechgeek.info
    ServerAlias crazytechgeek.info
    DocumentRoot /var/www/crazytechgeek.info/html
    ErrorLog /var/www/crazytechgeek.info/log/error.log
    CustomLog /var/www/crazytechgeek.info/log/requests.log combined
</VirtualHost>

ファイルを保存して終了します。

次に、 sites-enabled ディレクトリにシンボリックリンクを作成して、仮想ホストファイルを有効にします。

$ sudo ln -s /etc/httpd/sites-available/crazytechgeek.info.conf /etc/httpd/sites-enabled/crazytechgeek.info.conf

仮想ホストのSELinuxパーミッションの調整

CentOS8およびRHEL8には、Linuxシステムのセキュリティを強化するためのセキュリティモジュールであるSELinuxが付属しています。前の手順でカスタムログディレクトリを設定したので、いくつかのSELinuxポリシーを更新して、ApacheWebサーバーにディレクトリへの書き込みを指示する必要があります。

SELinux Apacheポリシーの調整には、2つのアプローチがあります。調整ポリシーをユニバーサルに調整する方法と、ディレクトリ上のポリシーを調整する方法です。後者の方が好ましいので、後者が好ましい。

ログディレクトリのSELinux権限を編集すると、Apacheのウェブサーバーのポリシーを完全に制御できます。この方法は非常に時間がかかり、仮想ホスト構成ファイルで指定された追加のディレクトリのコンテキストタイプを手動で構成する必要があります。

開始する前に、まずSELinuxによってログディレクトリに割り当てられたコンテキストタイプを確認します。

$ sudo ls -dlZ /var/www/crazytechgeek.info/log/

出力は、以下のようになります。

出力から、設定されたコンテキストはhttpd_sys_content_tです。これは、Webサーバーがログディレクトリ内のファイルのみを読み取ることができることを示しています。 Apacheがログエントリを生成してディレクトリに追加できるようにするには、このコンテキストをhttpd_log_tに変更する必要があります。

したがって、次のコマンドを実行します。

$ sudo semanage fcontext -a -t httpd_log_t "/var/www/crazytechgeek.info/log(/.*)?"

「semanage:コマンドが見つかりません」というエラーが発生した場合。

これは、semanageコマンドを提供するパッケージがインストールされていないことを意味します。このエラーを修正するには、これらのパッケージをインストールする必要があります。ただし、最初に、次のコマンドを実行して、どのパッケージがsemanageコマンドを提供しているかを確認します。

$ sudo dnf whatprovides /usr/sbin/semanage

出力は、semanageを提供するパッケージ(policycoreutils-python-utils)を提供します。

次に、DNFパッケージマネージャーを使用して、図のようにパッケージをインストールします。

$ sudo dnf install policycoreutils-python-utils

これで、コンテキストを変更するためのコマンドが機能するはずです。

$ sudo semanage fcontext -a -t httpd_log_t "/var/www/crazytechgeek.info/log(/.*)?"

変更を保存して永続化するには、次のようにrestoreconコマンドを発行します。

$ sudo restorecon -R -v /var/www/crazytechgeek.info/log

次のコマンドをもう一度実行すると、変更を確認できます。

$ sudo ls -dlZ /var/www/crazytechgeek.info/log/

出力に示されているように、コンテキストタイプが httpd_log_t に変更されていることに注意してください。

変更を適用するには、Apacheを再起動します。

$ sudo systemctl restart httpd

次のように内容を一覧表示することで、Apacheがログディレクトリにログファイルを保存しているかどうかを確認できます。

$ ls -l /var/www/crazytechgeek.info/log/

図のように、エラーログファイルとリクエストログファイルの2つのログファイルが表示されるはずです。

Apache仮想ホストのテスト

最後に、ApacheWebサーバーが仮想ホストファイルを提供していることを確認する必要があります。これを行うには、ブラウザを開き、サーバーのIPアドレスまたはドメイン名に移動します。

http://domain-name

完璧!これは、すべてが順調に進み、仮想ホストが期待どおりに提供されていることを示しています。

このガイドでは、CentOS8およびRHEL8にApacheWebサーバーをインストールする方法と、追加のドメインのコンテンツを提供するように仮想ホストファイルを構成する方法を学習しました。追加のドメインに対応するのに適していると思われる場合は、複数の仮想ホストファイルを自由に構成してください。

完全なホスティングスタックをセットアップする場合は、CentOS8にLAMPスタックをインストールすることをお勧めします。