CentOS8にApacheWebサーバーをインストールする方法
序章
Apache HTTPサーバーは、世界で最も広く使用されているWebサーバーです。 動的にロード可能なモジュール、堅牢なメディアサポート、他の一般的なソフトウェアとの広範な統合など、多くの強力な機能を提供します。
このガイドでは、CentOS8サーバーに仮想ホストを備えたApacheWebサーバーをインストールします。
前提条件
このガイドを完了するには、次のものが必要です。
- サーバーにsudo権限が設定されているroot以外のユーザー。CentOS8の初期サーバーセットアップガイドに従ってセットアップします。
- 上記のガイドのCentOS8(推奨)を使用したサーバーの初期設定のステップ4に従って、基本的なファイアウォールが構成されていることを確認します。
ステップ1—Apacheをインストールする
Apacheは、CentOSのデフォルトのソフトウェアリポジトリ内で利用できます。つまり、dnf
パッケージマネージャーを使用してインストールできます。
前提条件で構成された非rootsudoユーザーとして、Apacheパッケージをインストールします。
sudo dnf install httpd
インストールを確認した後、dnf
はApacheと必要なすべての依存関係をインストールします。
前提条件のセクションに記載されているCentOS8ガイドを使用したサーバーの初期設定のステップ4を完了すると、サーバーにfirewalld
がインストールされ、HTTP経由でリクエストを処理できるようになります。
HTTPS経由でコンテンツを提供するようにApacheを構成する場合も、https
サービスを有効にして、ポート443
を開く必要があります。
sudo firewall-cmd --permanent --add-service=https
次に、ファイアウォールをリロードして、次の新しいルールを有効にします。
sudo firewall-cmd --reload
ファイアウォールがリロードされると、サービスを開始してWebサーバーを確認する準備が整います。
ステップ2—Webサーバーを確認する
インストールが完了すると、ApacheはCentOSで自動的に起動しないため、Apacheプロセスを手動で起動する必要があります。
sudo systemctl start httpd
次のコマンドを使用して、サービスが実行されていることを確認します。
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
と入力してコマンドプロンプトに戻り、次のように入力します。
hostname -I
このコマンドは、ホストのすべてのネットワークアドレスを表示するため、スペースで区切られたいくつかのIPアドレスを取得します。 Webブラウザーでそれぞれを試して、機能するかどうかを判断できます。
または、curl
を使用してicanhazip.com
からIPをリクエストできます。これにより、インターネット上の別の場所から読み取ったパブリックIPv4アドレスが提供されます。
curl -4 icanhazip.com
サーバーのIPアドレスを取得したら、それをブラウザのアドレスバーに入力します。
http://your_server_ip
デフォルトのCentOS8ApacheWebページが表示されます。
このページは、Apacheが正しく機能していることを示しています。 また、重要なApacheファイルとディレクトリの場所に関する基本的な情報も含まれています。
ステップ3—Apacheプロセスの管理
サービスがインストールされて実行されたので、さまざまなsystemctlコマンドを使用してサービスを管理できます。
Webサーバーを停止するには、次のように入力します。
sudo systemctl stop httpd
停止時にWebサーバーを起動するには、次のように入力します。
sudo systemctl start httpd
サービスを停止してから再開するには、次のように入力します。
sudo systemctl restart httpd
単に構成を変更するだけの場合、Apacheは接続を切断せずにリロードできることがよくあります。 これを行うには、次のコマンドを使用します。
sudo systemctl reload httpd
デフォルトでは、Apacheはサーバーの起動時に自動的に起動するように構成されています。 これが希望どおりでない場合は、次のように入力してこの動作を無効にします。
sudo systemctl disable httpd
起動時にサービスを再度有効にするには、次のように入力します。
sudo systemctl enable httpd
サーバーが再度起動すると、Apacheが自動的に起動するようになりました。
Apacheのデフォルト構成では、サーバーが単一のWebサイトをホストできるようになります。 サーバーで複数のドメインをホストすることを計画している場合は、ApacheWebサーバーで仮想ホストを構成する必要があります。
手順4—仮想ホストの設定(推奨)
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.com
のhtml
ディレクトリを作成します。
sudo mkdir -p /var/www/example.com/html
サイトのログファイルを保存するための追加のディレクトリを作成します。
sudo mkdir -p /var/www/example.com/log
次に、$USER
環境変数を使用してhtml
ディレクトリの所有権を割り当てます。
sudo chown -R $USER:$USER /var/www/example.com/html
Webルートにデフォルトの権限が設定されていることを確認してください。
sudo chmod -R 755 /var/www
次に、vi
またはお気に入りのエディターを使用して、サンプルのindex.html
ページを作成します。
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
ディレクトリには、公開する仮想ホストへのシンボリックリンクが保持されます。 次のコマンドで両方のディレクトリを作成します。
sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled
次に、sites-enabled
ディレクトリで仮想ホストを探すようにApacheに指示します。 これを実現するには、viまたはお気に入りのテキストエディタを使用してApacheのメイン構成ファイルを編集し、追加の構成ファイル用のオプションのディレクトリを宣言する行を追加します。
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
ディレクトリに新しいファイルを作成することから始めます。
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
ディレクトリに各仮想ホストのシンボリックリンクを作成します。
sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/example.com.conf
これで仮想ホストが構成され、コンテンツを提供する準備が整いました。 Apacheサービスを再起動する前に、SELinuxが仮想ホストに対して適切なポリシーを設定していることを確認しましょう。
ステップ5—仮想ホストのSELinuxパーミッションの調整(推奨)
SELinux は、Linuxシステムのセキュリティを強化するLinuxカーネルセキュリティモジュールです。 CentOS 8には、デフォルトのApache構成で動作するように構成されたSELinuxが装備されています。 仮想ホスト構成ファイルにカスタムログディレクトリを設定してデフォルト構成を変更したため、Apacheサービスを開始しようとするとエラーが発生します。 これを解決するには、SELinuxポリシーを更新して、Apacheが必要なファイルに書き込めるようにする必要があります。
SELinuxではセキュリティレベルをカスタマイズできるため、環境のニーズに基づいてポリシーを設定するさまざまな方法があります。 この手順では、Apacheポリシーを調整する2つの方法(ユニバーサルと特定のディレクトリ)について説明します。 ディレクトリのポリシーを調整する方が安全であるため、推奨されるアプローチです。
Apacheポリシーを普遍的に調整する
Apacheポリシーを普遍的に設定すると、SELinuxは、httpd_unified
ブール値を使用してすべてのApacheプロセスを同じように処理するようになります。 このアプローチはより便利ですが、ファイルまたはディレクトリポリシーに焦点を当てたアプローチと同じレベルの制御は提供されません。
次のコマンドを実行して、ユニバーサルApacheポリシーを設定します。
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
ディレクトリに与えたコンテキストタイプを確認します。
sudo ls -dlZ /var/www/example.com/log/
このコマンドは、ディレクトリのSELinuxコンテキストを一覧表示して出力します。 次のような出力が表示されます。
Outputdrwxr-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アプリケーションのログファイルを生成して追加できます。
sudo semanage fcontext -a -t httpd_log_t "/var/www/example.com/log(/.*)?"
次に、restorecon
コマンドを使用してこれらの変更を適用し、再起動後も変更を保持します。
sudo restorecon -R -v /var/www/example.com/log
-R
フラグはこのコマンドを再帰的に実行します。つまり、新しいコンテキストを使用するように既存のファイルを更新します。 -v
フラグは、コマンドが行ったコンテキスト変更を出力します。 変更を確認する次の出力が表示されます。
OutputRelabeled /var/www/example.com/log from unconfined_u:object_r:httpd_sys_content_t:s0 to unconfined_u:object_r:httpd_log_t:s0
コンテキストをもう一度リストして、変更を確認できます。
sudo ls -dlZ /var/www/example.com/log/
出力には、更新されたコンテキストタイプが反映されます。
Outputdrwxr-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
タイプを使用しているので、仮想ホスト構成をテストする準備が整いました。
ステップ6—仮想ホストのテスト(推奨)
SELinuxコンテキストがいずれかの方法で更新されると、Apacheは/var/www/example.com/log
ディレクトリに書き込むことができるようになります。 これで、Apacheサービスを正常に再起動できます。
sudo systemctl restart httpd
/var/www/example.com/log
ディレクトリの内容を一覧表示して、Apacheがログファイルを作成したかどうかを確認します。
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
に移動します。ここで、次のように表示されます。
これにより、仮想ホストが正常に構成され、コンテンツが提供されていることが確認されます。 手順4と5を繰り返して、追加のドメインに対するSELinux権限を持つ新しい仮想ホストを作成します。
結論
このチュートリアルでは、ApacheWebサーバーをインストールして管理しました。 Webサーバーがインストールされたので、提供できるコンテンツの種類と、より豊かなエクスペリエンスを作成するために使用できるテクノロジーについて、多くのオプションがあります。
より完全なアプリケーションスタックを構築したい場合は、CentOS8でLAMPスタックを構成する方法に関するこの記事を参照してください。