CentOS8にApacheWebサーバーをインストールする方法
序章
Apache HTTPサーバーは、世界で最も広く使用されているWebサーバーです。 動的にロード可能なモジュール、堅牢なメディアサポート、他の一般的なソフトウェアとの広範な統合など、多くの強力な機能を提供します。
このガイドでは、CentOS8サーバーに仮想ホストを備えたApacheWebサーバーをインストールします。
前提条件
このガイドを完了するには、次のものが必要です。
- サーバーにsudo権限が設定されているroot以外のユーザー。CentOS8の初期サーバーセットアップガイドに従ってセットアップします。
- 上記のガイドのCentOS8(推奨)を使用したサーバーの初期設定のステップ4に従って、基本的なファイアウォールが構成されていることを確認します。
ステップ1—Apacheをインストールする
Apacheは、CentOSのデフォルトのソフトウェアリポジトリ内で利用できます。つまり、Apacheを使用してインストールできます。 dnf
パッケージマネージャー。
前提条件で構成された非rootsudoユーザーとして、Apacheパッケージをインストールします。
- sudo dnf install httpd
インストールを確認した後、 dnf
Apacheと必要なすべての依存関係をインストールします。
前提条件のセクションに記載されているCentOS8ガイドを使用したサーバーの初期セットアップのステップ4を完了すると、すでにインストールされています。 firewalld
サーバー上でHTTP経由でリクエストを処理します。
HTTPS経由でコンテンツを提供するようにApacheを構成する場合も、ポートを開く必要があります。 443
を有効にすることによって https
サービス:
- 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
からIPをリクエストするには icanhazip.com
、インターネット上の別の場所から読み取ったパブリック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では、デフォルトで1つの仮想ホストが有効になっており、 /var/www/html
ディレクトリ。 これは単一のサイトではうまく機能しますが、複数のサイトをホストしている場合は扱いにくくなる可能性があります。 変更する代わりに /var/www/html
、内にディレクトリ構造を作成します /var/www
のために example.com
サイト、去る /var/www/html
クライアント要求が他のサイトと一致しない場合に提供されるデフォルトのディレクトリとして配置されます。
を作成します html
のディレクトリ example.com
次のように、 -p
必要な親ディレクトリを作成するためのフラグ:
- sudo mkdir -p /var/www/example.com/html
サイトのログファイルを保存するための追加のディレクトリを作成します。
- sudo mkdir -p /var/www/example.com/log
次に、の所有権を割り当てます html
ディレクトリと $USER
環境変数:
- sudo chown -R $USER:$USER /var/www/example.com/html
Webルートにデフォルトの権限が設定されていることを確認してください。
- sudo chmod -R 755 /var/www
次に、サンプルを作成します index.html
使用するページ vi
またはお気に入りの編集者:
- sudo vi /var/www/example.com/html/index.html
プレス i
に切り替えるには INSERT
モードにして、次のサンプル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
それらを保存するディレクトリ。 また、を作成します sites-enabled
仮想ホストが訪問者にサービスを提供する準備ができていることをApacheに通知するディレクトリ。 The sites-enabled
ディレクトリは、公開する仮想ホストへのシンボリックリンクを保持します。 次のコマンドで両方のディレクトリを作成します。
- sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled
次に、Apacheに仮想ホストを探すように指示します。 sites-enabled
ディレクトリ。 これを実現するには、viまたはお気に入りのテキストエディタを使用してApacheのメイン構成ファイルを編集し、追加の構成ファイル用のオプションのディレクトリを宣言する行を追加します。
- sudo vi /etc/httpd/conf/httpd.conf
プレスキャピタル G
ファイルの終わりに向かってナビゲートします。 次にを押します i
に切り替えるには INSERT
モードにして、ファイルの最後に次の行を追加します。
...
# 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
ドメインからドメイン名へ:
<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ポリシーを設定します。
- sudo setsebool -P httpd_unified 1
The setsebool
コマンドはSELinuxブール値を変更します。 The -P
フラグは起動時の値を更新し、この変更が再起動後も持続するようにします。 httpd_unified
は、すべてのApacheプロセスを同じタイプとして扱うようにSELinuxに指示するブール値であるため、次の値で有効にしました。 1
.
ディレクトリでのApacheポリシーの調整
のSELinux権限を個別に設定する /var/www/example.com/log
ディレクトリを使用すると、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
、これは、Apacheプロセスがこのディレクトリに作成されたファイルのみを読み取ることができることをSELinuxに通知します。 このチュートリアルでは、コンテキストタイプを変更します /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
The -R
flagはこのコマンドを再帰的に実行します。つまり、新しいコンテキストを使用するように既存のファイルを更新します。 The -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スタックを構成する方法に関するこの記事を参照してください。