序章

Apache HTTPサーバーは、世界で最も広く使用されているWebサーバーです。 動的にロード可能なモジュール、堅牢なメディアサポート、他の一般的なソフトウェアとの広範な統合など、多くの強力な機能を提供します。

このガイドでは、CentOS8サーバーに仮想ホストを備えたApacheWebサーバーをインストールします。

前提条件

このガイドを完了するには、次のものが必要です。

  • サーバーにsudo権限が設定されているroot以外のユーザー。CentOS8初期サーバーセットアップガイドに従ってセットアップします。
  • 上記のガイドのCentOS8(推奨)を使用したサーバーの初期設定のステップ4に従って、基本的なファイアウォールが構成されていることを確認します。

ステップ1—Apacheをインストールする

Apacheは、CentOSのデフォルトのソフトウェアリポジトリ内で利用できます。つまり、dnfパッケージマネージャーを使用してインストールできます。

前提条件で構成された非rootsudoユーザーとして、Apacheパッケージをインストールします。

  1. sudo dnf install httpd

インストールを確認した後、dnfはApacheと必要なすべての依存関係をインストールします。

前提条件のセクションに記載されているCentOS8ガイドを使用したサーバーの初期設定のステップ4を完了すると、サーバーにfirewalldがインストールされ、HTTP経由でリクエストを処理できるようになります。

HTTPS経由でコンテンツを提供するようにApacheを構成する場合は、httpsサービスを有効にしてポート443を開くこともできます。

  1. sudo firewall-cmd --permanent --add-service=https

次に、ファイアウォールをリロードして、次の新しいルールを有効にします。

  1. sudo firewall-cmd --reload

ファイアウォールがリロードされると、サービスを開始してWebサーバーを確認する準備が整います。

ステップ2—Webサーバーを確認する

インストールが完了すると、ApacheはCentOSで自動的に起動しないため、Apacheプロセスを手動で起動する必要があります。

  1. sudo systemctl start httpd

次のコマンドを使用して、サービスが実行されていることを確認します。

  1. sudo systemctl status httpd

サービスの実行中は、activeステータスを受け取ります。

Output
● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disa> Active: active (running) since Thu 2020-04-23 22:25:33 UTC; 11s ago Docs: man:httpd.service(8) Main PID: 14219 (httpd) Status: "Running, listening on: port 80" Tasks: 213 (limit: 5059) Memory: 24.9M CGroup: /system.slice/httpd.service ├─14219 /usr/sbin/httpd -DFOREGROUND ├─14220 /usr/sbin/httpd -DFOREGROUND ├─14221 /usr/sbin/httpd -DFOREGROUND ├─14222 /usr/sbin/httpd -DFOREGROUND └─14223 /usr/sbin/httpd -DFOREGROUND ...

この出力が示すように、サービスは正常に開始されました。 ただし、これをテストする最良の方法は、Apacheにページを要求することです。

デフォルトのApacheランディングページにアクセスして、ソフトウェアがIPアドレスを介して正しく実行されていることを確認できます。 サーバーのIPアドレスがわからない場合は、コマンドラインからいくつかの異なる方法で取得できます。

qと入力してコマンドプロンプトに戻り、次のように入力します。

  1. hostname -I

このコマンドは、ホストのすべてのネットワークアドレスを表示するため、スペースで区切られたいくつかのIPアドレスを取得します。 Webブラウザーでそれぞれを試して、機能するかどうかを判断できます。

または、curlを使用してicanhazip.comからIPをリクエストできます。これにより、インターネット上の別の場所から読み取ったパブリックIPv4アドレスが提供されます。

  1. curl -4 icanhazip.com

サーバーのIPアドレスを取得したら、それをブラウザのアドレスバーに入力します。

http://your_server_ip

デフォルトのCentOS8ApacheWebページが表示されます。

Default Apache page for CentOS 8

このページは、Apacheが正しく機能していることを示しています。 また、重要なApacheファイルとディレクトリの場所に関する基本的な情報も含まれています。

ステップ3—Apacheプロセスの管理

サービスがインストールされて実行されたので、さまざまなsystemctlコマンドを使用してサービスを管理できます。

Webサーバーを停止するには、次のように入力します。

  1. sudo systemctl stop httpd

停止時にWebサーバーを起動するには、次のように入力します。

  1. sudo systemctl start httpd

サービスを停止してから再開するには、次のように入力します。

  1. sudo systemctl restart httpd

単に設定を変更するだけの場合、Apacheは接続を切断せずにリロードできることがよくあります。 これを行うには、次のコマンドを使用します。

  1. sudo systemctl reload httpd

デフォルトでは、Apacheはサーバーの起動時に自動的に起動するように構成されています。 これが希望どおりでない場合は、次のように入力してこの動作を無効にします。

  1. sudo systemctl disable httpd

起動時にサービスを再度有効にするには、次のように入力します。

  1. sudo systemctl enable httpd

サーバーが再度起動すると、Apacheが自動的に起動するようになりました。

Apacheのデフォルト設定では、サーバーが単一のWebサイトをホストできるようになります。 サーバーで複数のドメインをホストすることを計画している場合は、ApacheWebサーバーで仮想ホストを構成する必要があります。

Apache Webサーバーを使用する場合、仮想ホスト(Nginxに精通している場合、これらはサーバーブロックに似ています)を使用して、構成の詳細をカプセル化し、単一のサーバーから複数のドメインをホストできます。 この手順では、example.comというドメインを設定しますが、これを独自のドメイン名に置き換える必要があります。 DigitalOceanでドメイン名を設定する場合は、ネットワークドキュメントを参照してください。

CentOS 8上のApacheでは、/var/www/htmlディレクトリからドキュメントを提供するように構成された1つの仮想ホストがデフォルトで有効になっています。 これは単一のサイトではうまく機能しますが、複数のサイトをホストしている場合は扱いにくくなる可能性があります。 /var/www/htmlを変更する代わりに、/var/www内にexample.comサイトのディレクトリ構造を作成し、/var/www/htmlをデフォルトのディレクトリとして残します。クライアント要求が他のサイトと一致しません。

-pフラグを使用して必要な親ディレクトリを作成し、次のようにexample.comhtmlディレクトリを作成します。

  1. sudo mkdir -p /var/www/example.com/html

サイトのログファイルを保存するための追加のディレクトリを作成します。

  1. sudo mkdir -p /var/www/example.com/log

次に、$USER環境変数を使用してhtmlディレクトリの所有権を割り当てます。

  1. sudo chown -R $USER:$USER /var/www/example.com/html

Webルートにデフォルトの権限が設定されていることを確認してください。

  1. sudo chmod -R 755 /var/www

次に、viまたはお気に入りのエディターを使用して、サンプルのindex.htmlページを作成します。

  1. sudo vi /var/www/example.com/html/index.html

iを押してINSERTモードに切り替え、次のサンプルHTMLをファイルに追加します。

/var/www/example.com/html/index.html
<html>
  <head>
    <title>Welcome to Example.com!</title>
  </head>
  <body>
    <h1>Success! The example.com virtual host is working!</h1>
  </body>
</html>

ESCを押し、:wqと入力し、ENTERを押して、ファイルを保存して閉じます。

サイトディレクトリとサンプルインデックスファイルを配置すると、仮想ホストファイルを作成する準備がほぼ整います。 仮想ホストファイルは、個別のサイトの構成を指定し、ApacheWebサーバーにさまざまなドメイン要求に応答する方法を指示します。

仮想ホストを作成する前に、それらを保存するためのsites-availableディレクトリを作成する必要があります。 また、仮想ホストが訪問者にサービスを提供する準備ができていることをApacheに通知するsites-enabledディレクトリを作成します。 sites-enabledディレクトリには、公開する仮想ホストへのシンボリックリンクが保持されます。 次のコマンドで両方のディレクトリを作成します。

  1. sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled

次に、sites-enabledディレクトリで仮想ホストを探すようにApacheに指示します。 これを実現するには、viまたはお気に入りのテキストエディタを使用してApacheのメイン構成ファイルを編集し、追加の構成ファイル用のオプションのディレクトリを宣言する行を追加します。

  1. sudo vi /etc/httpd/conf/httpd.conf

大文字のGを押して、ファイルの最後に移動します。 次に、iを押してINSERTモードに切り替え、ファイルの最後に次の行を追加します。

/etc/httpd/conf/httpd.conf
...
# Supplemental configuration
#
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
IncludeOptional sites-enabled/*.conf

その行の追加が完了したら、ファイルを保存して閉じます。 仮想ホストディレクトリが配置されたので、仮想ホストファイルを作成します。

sites-availableディレクトリに新しいファイルを作成することから始めます。

  1. sudo vi /etc/httpd/sites-available/example.com.conf

次の構成ブロックを追加し、example.comドメインを自分のドメイン名に変更します。

/etc/httpd/sites-available/example.com.conf
<VirtualHost *:80>
    ServerName www.example.com
    ServerAlias example.com
    DocumentRoot /var/www/example.com/html
    ErrorLog /var/www/example.com/log/error.log
    CustomLog /var/www/example.com/log/requests.log combined
</VirtualHost>

これにより、公的にアクセス可能なWebドキュメントを保持するルートを直接見つける場所がApacheに通知されます。 また、この特定のサイトのエラーログとリクエストログを保存する場所をApacheに指示します。

終了したら、ファイルを保存して閉じます。

仮想ホストファイルを作成したので、それらを有効にして、Apacheが訪問者にそれらを提供することを認識できるようにします。 これを行うには、sites-enabledディレクトリに各仮想ホストのシンボリックリンクを作成します。

  1. sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/example.com.conf

これで仮想ホストが構成され、コンテンツを提供する準備が整いました。 Apacheサービスを再起動する前に、SELinuxに仮想ホストの正しいポリシーが設定されていることを確認しましょう。

SELinux は、Linuxシステムのセキュリティを強化するLinuxカーネルセキュリティモジュールです。 CentOS 8には、デフォルトのApache構成で動作するように構成されたSELinuxが装備されています。 仮想ホスト構成ファイルにカスタムログディレクトリを設定してデフォルト構成を変更したため、Apacheサービスを開始しようとするとエラーが発生します。 これを解決するには、SELinuxポリシーを更新して、Apacheが必要なファイルに書き込めるようにする必要があります。

SELinuxではセキュリティレベルをカスタマイズできるため、環境のニーズに基づいてポリシーを設定するさまざまな方法があります。 この手順では、Apacheポリシーを調整する2つの方法(ユニバーサルと特定のディレクトリ)について説明します。 ディレクトリのポリシーを調整する方が安全であるため、推奨されるアプローチです。

Apacheポリシーを普遍的に調整する

Apacheポリシーを普遍的に設定すると、SELinuxは、httpd_unifiedブール値を使用してすべてのApacheプロセスを同じように処理するようになります。 このアプローチはより便利ですが、ファイルまたはディレクトリポリシーに焦点を当てたアプローチと同じレベルの制御は提供されません。

次のコマンドを実行して、ユニバーサルApacheポリシーを設定します。

  1. sudo setsebool -P httpd_unified 1

setseboolコマンドは、SELinuxブール値を変更します。 -Pフラグは起動時の値を更新し、この変更が再起動後も持続するようにします。 httpd_unifiedは、すべてのApacheプロセスを同じタイプとして扱うようにSELinuxに指示するブール値であるため、1の値で有効にしました。

ディレクトリでのApacheポリシーの調整

/var/www/example.com/logディレクトリにSELinux権限を個別に設定すると、Apacheポリシーをより細かく制御できますが、より多くのメンテナンスが必要になる場合もあります。 このオプションはポリシーを普遍的に設定するものではないため、仮想ホスト構成で指定された新しいログディレクトリのコンテキストタイプを手動で設定する必要があります。

まず、SELinuxが/var/www/example.com/logディレクトリに与えたコンテキストタイプを確認します。

  1. sudo ls -dlZ /var/www/example.com/log/

このコマンドは、ディレクトリのSELinuxコンテキストを一覧表示して出力します。 次のような出力が表示されます。

Output
drwxr-xr-x. 2 root root unconfined_u:object_r:httpd_sys_content_t:s0 6 Apr 23 23:51 /var/www/example.com/log/

現在のコンテキストはhttpd_sys_content_tで、これはSELinuxにApacheプロセスがこのディレクトリに作成されたファイルのみを読み取ることができることを通知します。 このチュートリアルでは、/var/www/example.com/logディレクトリのコンテキストタイプをhttpd_log_tに変更します。 このタイプにより、ApacheはWebアプリケーションのログファイルを生成して追加できます。

  1. sudo semanage fcontext -a -t httpd_log_t "/var/www/example.com/log(/.*)?"

次に、restoreconコマンドを使用してこれらの変更を適用し、再起動後も変更を保持します。

  1. sudo restorecon -R -v /var/www/example.com/log

-Rフラグはこのコマンドを再帰的に実行します。つまり、新しいコンテキストを使用するように既存のファイルを更新します。 -vフラグは、コマンドが行ったコンテキスト変更を出力します。 変更を確認する次の出力が表示されます。

Output
Relabeled /var/www/example.com/log from unconfined_u:object_r:httpd_sys_content_t:s0 to unconfined_u:object_r:httpd_log_t:s0

コンテキストをもう一度リストして、変更を確認できます。

  1. sudo ls -dlZ /var/www/example.com/log/

出力には、更新されたコンテキストタイプが反映されます。

Output
drwxr-xr-x. 2 root root unconfined_u:object_r:httpd_log_t:s0 6 Apr 23 23:51 /var/www/example.com/log/

/var/www/example.com/logディレクトリがhttpd_log_tタイプを使用しているので、仮想ホスト構成をテストする準備が整いました。

SELinuxコンテキストがいずれかの方法で更新されると、Apacheは/var/www/example.com/logディレクトリに書き込むことができるようになります。 これで、Apacheサービスを正常に再起動できます。

  1. sudo systemctl restart httpd

/var/www/example.com/logディレクトリの内容を一覧表示して、Apacheがログファイルを作成したかどうかを確認します。

  1. ls -lZ /var/www/example.com/log

Apacheが仮想ホスト構成で指定されたerror.logおよびrequests.logファイルを作成できたという確認を受け取ります。

Output
-rw-r--r--. 1 root root system_u:object_r:httpd_log_t:s0 0 Apr 24 00:06 error.log -rw-r--r--. 1 root root system_u:object_r:httpd_log_t:s0 0 Apr 24 00:06 requests.log

仮想ホストを設定し、SELinux権限を更新したので、Apacheがドメイン名を提供します。 これをテストするには、http://example.comに移動します。ここで、次のように表示されます。

Success! The example.com virtual host is working!

これにより、仮想ホストが正常に構成され、コンテンツが提供されていることが確認されます。 手順4と5を繰り返して、追加のドメインに対するSELinux権限を持つ新しい仮想ホストを作成します。

結論

このチュートリアルでは、ApacheWebサーバーをインストールして管理しました。 Webサーバーがインストールされたので、提供できるコンテンツの種類と、より豊かなエクスペリエンスを作成するために使用できるテクノロジーについて、多くのオプションがあります。

より完全なアプリケーションスタックを構築したい場合は、CentOS8LAMPスタックを構成する方法に関するこの記事を参照してください。