Webサーバーは、Webページを保存、処理し、Webサイトの訪問者に配信します。かなりの数のオープンソースのWebサーバーソフトウェアの選択肢がありますが、Apache HTTPサーバーは、世界で最も広く使用されているWebサーバーと見なされています。これは、オープンソースであることに加えて、そのモジュール式アーキテクチャにより、さまざまな目的に合わせてモジュールを追加して機能を拡張できるためです。その結果、このWebサーバーは非常に堅牢です。
ApacheをCentOS 7システムにインストールしたい場合、このチュートリアルが役立ちます。さらに、バーチャルホストを作成して、CentOS上で動作する1つのApache HTTPサーバーで複数のWebサイトを配信する方法も学びます。
これはApacheのインストールのみに焦点を当てた詳細なチュートリアルです。LAMPスタックに関する要点をまとめたチュートリアルをお探しの場合は、こちらのCentOS 7にLinux、Apache、MySQL、PHP(LAMP)をインストールする方法のガイドをご覧ください。それでは、始めましょう!
前提条件
これは実践的なチュートリアルであるため、以下を用意する必要があります。
- CentOS 7を実行しているサーバー。CloudSigmaでいくつかの簡単な手順に従って作成できます(このリンクを参照).
- sudo権限を持つ非rootユーザーを構成する。その後、このユーザーでログインします。
- 次のチュートリアルの手順に従って、基本的なファイアウォールを構成します:CentOS 7でFirewallDを使用してファイアウォールを設定する.
ステップ 1: Apache HTTPサーバーのインストール
ApacheはCentOSのデフォルトのリポジトリに含まれています。そのため、yumパッケージマネージャーを使用して簡単にインストールできます。前提条件のセクションに従い、非rootユーザーでログインしている必要があります。ターミナルで次のコマンドを実行して、ローカルのApache httpdパッケージインデックスを更新します:
|
1 |
sudo yum update httpd |
パッケージが更新されたら、次のコマンドを入力してApacheをインストールします:
|
1 |
sudo yum install httpd |
インストールを確認し、yumがApacheと必要な依存関係をインストールするのを待ちます。
もし、CentOS 7でFirewallDを使用してファイアウォールを設定するのチュートリアルの手順に従い、ポート80のファイアウォールを有効にしている場合は、準備完了です。FirewalldはCentOSのファイアウォールマネージャーです。そうでない場合は、次のコマンドを入力してfirewalldのhttp(ポート80)サービスを有効にできます:
|
1 |
sudo firewall-cmd --permanent --add-service=http |
セキュアなHTTPS経由でトラフィックを配信する予定がある場合は、次のコマンドを入力してfirewalldのhttps(ポート443)サービスを有効にできます:
|
1 |
sudo firewall-cmd --permanent --add-service=https |
最後に、変更を有効にするためにfirewalldをリロードする必要があります。リロードするコマンドは次のとおりです:
|
1 |
sudo firewall-cmd –reload |
この時点で、Apacheのインストールと設定が完了し、上記のコマンドを実行したかどうかに応じて、HTTPまたはHTTPS経由でトラフィックを配信できるようになりました。
ステップ 2: Apache Webサーバーが動作していることの確認
CentOSでは、インストール後にApacheプロセスが自動的に起動しません。手動でApacheを起動するには、次のコマンドを入力します:
|
1 |
sudo systemctl start httpd |
サービスが正常に起動したことを確認するには、次のコマンドを入力してステータスを確認します:
|
1 |
sudo systemctl status httpd |
サービスが実行されている場合、下のスクリーンショットのような出力が表示されます。アクティブ(active)ステータスに注目してください:

出力は、サービスが正常に起動し、実行中であることを示しています。次に、Apacheがインターネットユーザーにページを配信できることもテストする必要があります。Apacheには、サーバーがインターネット経由でアクセスできるかどうかをテストするために使用できるデフォルトのページが付属しています。
サーバーのパブリックIPアドレスがまだわからない場合は、確認する必要があります。このIPアドレスは、ブラウザのアドレスバーに入力してデフォルトのApache Webページをリクエストするために使用します。次のコマンドを入力すると、ホストのネットワークアドレスを表示できます:
|
1 |
hostname –I |
取得したアドレスのリストから、ブラウザでそれぞれを試して動作することを確認できます。必要に応じて、curl からIPアドレスを取得するには、icanhazip.com を使用します。以下のコマンドは、別のインターネット上のコンピュータから見たパブリックIPアドレスを出力します。
|
1 |
curl -4 icanhazip.com |
Once you have your server’s public IP address, copy and paste it into your browser’s address bar:
|
1 |
http://your_server_public_ip |
ブラウザにデフォルトのCentOS 7 Apacheウェブページが読み込まれるはずです:

デフォルトのApacheウェブページを読み込むことができた場合、サーバーは正しく動作しています。下にスクロールすると、Apacheのファイルやディレクトリの場所に関するいくつかの基本的な情報が表示されます。サービスがインストールされ、適切に動作していれば、さまざまな systemctl コマンドを使用してサービスを管理できます。
ステップ 3: Apache サービスの管理
このセクションでは、いくつかの基本的なApache管理コマンドを紹介します。ウェブサーバーを停止するコマンドは次のとおりです:
|
1 |
sudo systemctl stop httpd |
ウェブサーバーを起動するコマンドは次のとおりです:
|
1 |
sudo systemctl start httpd |
次に、ウェブサーバーを再起動(停止して起動)するコマンドは次のとおりです:
|
1 |
sudo systemctl restart httpd |
この後、Apacheサービスをリロードするコマンドを紹介します。このコマンドは、単に設定を変更する場合に必要です。リロードすることで、Apacheプロセスは再起動した場合のように接続を切断することなく、設定の変更を反映します:
|
1 |
sudo systemctl reload httpd |
デフォルトの設定では、サーバーの起動時にApacheが自動的に起動します。この動作を変更したい場合、起動時の自動起動を無効にするコマンドは次のとおりです:
|
1 |
sudo systemctl disable httpd |
起動時の自動起動を再度有効にするには、次のコマンドを入力します:
|
1 |
sudo systemctl enable httpd |
ステップ 4: Apache バーチャルホストの設定
デフォルトでは、Apacheは単一のウェブサイトをホストして提供するように設定されています。多くの場合、ウェブサーバーで複数のウェブサイトをホストして提供したいと考えるでしょう。例えば、サブドメインを持っていたり、メインの会社/組織のウェブサイト用にブログページを設定したい場合があります。ここでApacheバーチャルホストの出番です。Apacheバーチャルホストを使用すると、複数のウェブサイトを提供するようにウェブサーバーを設定できます。Apacheバーチャルホストは、Nginxサーバー.
におけるサーバーブロックに相当します。このチュートリアルでは、ドメインとして example.com を使用してバーチャルホストを作成する方法を説明します。もちろん、example.com ドメインはインターネット上では機能しないため、実際のドメインに置き換える必要があります。手順は同じです。
CentOSにApacheをインストールすると、/var/www/html ディレクトリからコンテンツを提供するように設定されたバーチャルホストが1つインストールされます。この設計は、単一のサイトをホストしている場合にはうまく機能します。しかし、複数のサイトをホストできるようにしたいと考えています。デフォルトの /var/www/html ディレクトリはそのまま残し、代わりに /var/www 内に example.com ドメイン用の別のディレクトリを作成します。デフォルトのディレクトリを残しておく理由は、クライアントからのリクエストがバーチャルホストで設定した他のどのサイトにも一致しない場合に、そのディレクトリが提供されるようにするためです。さらに、作成したバーチャルホストを無効にしたい場合でも、デフォルトのディレクトリがトラフィックを処理し続けます。
まず、/var/www 内にドメイン名用のディレクトリを作成します。名前は自由に選択できます。ただし、バーチャルホストの conf ファイルを作成する際に覚えやすいように、ドメインに似た名前を選択することをお勧めします。次のコマンドを入力して、exampleディレクトリを作成します:
|
1 |
sudo mkdir -p /var/www/example |
サイトのログファイルを保持する追加のフォルダーを作成するには、次のコマンドを入力します:
|
1 |
sudo mkdir -p /var/www/example/log |
ウェブサイトのディレクトリが用意できたら、次のコマンドを使用して、$USER 環境変数でディレクトリの所有権を割り当てます:
|
1 |
sudo chown -R $USER:$USER /var/www/example |
次のコマンドを実行して、Webルートにデフォルトの権限が設定されていることを確認します:
|
1 |
sudo chmod -R 755 /var/www |
次に、シンプルな index.html ページを、nanoを使用して example ディレクトリ内に作成します。次のコマンドを入力してください:
|
1 |
sudo nano /var/www/example/index.html |
nanoエディタで、次のHTMLコードスニペットを追加します:
|
1 2 3 4 5 6 7 8 |
<html> <head> <title>ようこそ へ Example.com!</title> </head> <body> <h1>もし あなたが できる 見える この メッセージ, それは 意味します <em>example.com</em> バーチャル ホスト が 動作している!</h1> </body> </html> |
完了したら、ファイルを保存するために Ctrl O を押し、さらに ENTER を押します。その後、次のキーを押してエディタを閉じることができます:Ctrl X.
ここまでは、バーチャルホストをテストするためのサイトディレクトリと基本的なWebページを作成しました。次に、バーチャルホストの設定ファイルを作成します。バーチャルホストファイルは、単一のApacheサーバー上でホストしたいさまざまなサイトの設定を指定するものです。設定されたドメイン名へのリクエストを、特定のディレクトリに転送します。
バーチャルホストファイルは、次のディレクトリに保存されます:/etc/httpd/sites-available。有効化されたバーチャルホストファイルは、/etc/httpd/sites-available ディレクトリから /etc/httpd/sites-enabled ディレクトリへシンボリックリンクが張られます。CentOSではこれら2つのディレクトリはデフォルトで作成されないため、自分で作成する必要があります。次のコマンドを入力してディレクトリを作成してください:
|
1 |
sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled |
ディレクトリが作成できたら、Apacheに対して sites-enabled ディレクトリ内のバーチャルホストを探すように指示します。これは、Apacheのメイン設定ファイルを変更することで行います。次のコマンドを入力して、nanoエディタでファイルを開きます:
|
1 |
sudo nano /etc/httpd/conf/httpd.conf |
Apacheに対して、任意のディレクトリにある追加の設定ファイルを探すように指示する行を追加します。ファイルの最下部までスクロールし、最後に次の行を追加してください:
|
1 |
IncludeOptional sites-enabled/*.conf |
ファイルを保存するには、Ctrl O を押し、さらに ENTER を押します。その後、次のキーを押してエディタを閉じることができます:Ctrl X。次のステップは、sites-available ディレクトリ内にバーチャルホストファイルを作成することです。次のコマンドを入力して、nanoエディタで新しいファイルを作成し、開きます:
|
1 |
sudo nano /etc/httpd/sites-available/example.conf |
開いたファイルに、次の設定ブロックを追加します。当ガイドの example.com を実際のドメイン名に置き換えてください。また、/var/www/example で異なるディレクトリ名を使用した場合は、それに応じて適切に更新してください:
|
1 2 3 4 5 6 7 |
<VirtualHost *:80> ServerName www.example.com ServerAlias example.com DocumentRoot /var/www/example ErrorLog /var/www/example/log/error.log CustomLog /var/www/example/log/requests.log combined </VirtualHost> |
ご覧の通り、ドメイン名と、このドメインで提供されるファイルが配置されているドキュメントルートを指定しました。また、エラーログの場所も指定しています。これはサーバーのトラブルシューティングの際に役立ちます。
バーチャルホストファイルが sites-available ディレクトリ内に作成されたら、次のステップは、sites-enabled ディレクトリへのシンボリックリンクを作成してファイルを有効にすることです。次のコマンドを入力してシンボリックリンクを作成します:
|
1 |
sudo ln -s /etc/httpd/sites-available/example.conf /etc/httpd/sites-enabled/example.conf |
ここまでの手順に従っていれば、バーチャルホストはウェブサイトのコンテンツを提供する準備が整っているはずです。ただし、バーチャルホストが機能し始める前にもう1つ設定を確認する必要があります。これについては次に説明します。
ステップ 5: バーチャルホストを許可するためのSELinux権限の調整
以下を含むLinuxディストリビューション Fedora、RHEL、およびCentOSには、デフォルトでSELinuxが付属しています。SELinux (Security Enhanced Linux) は、サーバーがリクエストを処理する方法、およびユーザーがソケット、ネットワークポート、および重要なディレクトリとやり取りする方法を制限および定義する、Linuxシステム用のセキュリティアーキテクチャです。
デフォルトの状態では、SELinuxはデフォルトのApache設定で動作します。しかし、カスタムログディレクトリを含む、作成したカスタムバーチャルホストを使用すると、Apacheサービスを再起動しようとしたときにサービスエラーが発生します。解決策は、Apacheサービスが必要なファイルに書き込めるようにSELinuxポリシーを変更することです。
SELinuxはCentOSを非常に安全なサーバーにします。そのため、完全に無効にすることはお勧めしません。SELinuxではさまざまな方法でセキュリティレベルをカスタマイズできるため、環境のニーズに基づいてのみポリシーを更新または設定することをお勧めします。
Apacheポリシーを更新するには、次の2つのオプションがあります:全体的(ユニバーサル) に行うか、または 特定のディレクトリごと に行うかです。特定のディレクトリに限定してポリシーを更新する方が安全です。そのため、こちらが推奨されるオプションです。
-
Apacheポリシーを全体的に更新する
Apacheポリシーを全体的に変更して、SELinuxがすべてのApacheプロセスを同一に処理するように指示できます。これには、httpd_unified Boolean値を使用します。Apacheポリシーを全体的に変更すると、各ディレクトリを個別に設定する場合と同じレベルの制御は得られないことに注意してください。ただし、メンテナンスの面ではより便利です。次のコマンドを実行して、Apacheポリシーを全体的に更新します:
|
1 |
sudo setsebool -P httpd_unified 1 |
このコマンドの値が何を行っているかを定義しましょう:
- setsebool – SELinuxのboolean値を更新します。
- -P タグ – 起動時の値を更新するため、この変更は再起動後も維持されます。
- httpd_unified – すべてのApacheプロセスを同じタイプとして処理するようにSELinuxに指示するboolean値です。値1を使用すると有効になります。
-
ディレクトリごとのApacheポリシーの調整
ディレクトリをより細かく制御したい場合は、ディレクトリごとにApacheポリシーを調整するのが正しい方法です。ただし、より多くのメンテナンスが必要になるというオーバーヘッドが伴います。これはポリシーがグローバルではないためです。したがって、バーチャルホストのconfファイルで指定する新しいログディレクトリに対して、コンテキストタイプを手動で設定する必要があります。
ポリシーを更新する前に、まずSELinuxが /var/www/example/log ディレクトリに割り当てたコンテキストタイプを、次のコマンドを使用して確認します:
|
1 |
sudo ls -dZ /var/www/example/log/ |
コマンドは次のような出力を返します。これは基本的にディレクトリのSELinuxコンテキストです:
|
1 |
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/example/log/ |
httpd_sys_content_t は現在のコンテキストであり、Apacheプロセスがこのディレクトリに作成されたファイルの読み取りのみを許可されていることをSELinuxに伝えます。バーチャルホストの設定から、Apacheが /var/www/example/log ディレクトリ内のログファイルに書き込めるようにしたいため、Apacheがウェブアプリケーションのログファイルを生成および追記できるようにこのポリシーを変更します。これを許可するコンテキストは httpd_log_t です。コンテキストを更新するコマンドは次のとおりです:
|
1 |
sudo semanage fcontext -a -t httpd_log_t "/var/www/example/log(/.*)?" |
上記のコマンドによる変更を適用し、再起動後も維持させるには、次のコマンドを実行します:
|
1 |
sudo restorecon -R -v /var/www/example/log |
コマンドが何を行うかを定義しましょう:
- restorecon – 変更を適用し、再起動後も確実に維持されるようにします。
- -R フラグ – コマンドを再帰的に実行し、既存のファイルを更新して新しいコンテキストを使用するようにします。
- -v フラグ – コマンドの実行後にコンテキストの変更を出力します。以下のように出力されます。
|
1 2 |
出力: restorecon reset /var/www/example/log context unconfined_u:object_r:httpd_sys_content_t:s0->unconfined_u:object_r:httpd_log_t:s0 |
|
1 |
sudo ls -dZ /var/www/example/log/ |
|
1 |
drwxr-xr-x. root root unconfined_u:object_r:httpd_log_t:s0 /var/www/example.com/log |
ステップ 6: 仮想ホスト設定のテスト
仮想ホストをテストする前に、Apacheサービスを再起動する必要があります。そのためのコマンドは次のとおりです。
|
1 |
sudo systemctl restart httpd |
次に、以下のコマンドを使用してログディレクトリの内容を一覧表示します。
|
1 |
ls -lZ /var/www/example/log |
Apacheがログファイルを作成したことを示す、以下のような内容が表示されるはずです。

ここまでの手順に従っていれば、仮想ホストファイルで定義したドメイン名にアクセスしたときに、ApacheがサンプルHTMLページを表示できるようになっているはずです。必要に応じて、ステップ4と5を繰り返して追加のドメインを設定し、それらのSELinux権限を適切に更新できます。
まとめ
このチュートリアルでは、Apacheをインストールし、Apacheがカスタムログファイルに書き込めるようにSELinuxポリシーを更新する方法を学び、最後に設定をテストして正しく動作していることを確認しました。この知識をベースに、さらに豊かな体験を提供する優れたアプリケーションを構築できるはずです。
完全なウェブスタックを探索したい場合は、「CentOS 7にLAMPスタックをインストールする方法」のチュートリアルをご覧ください。.
ハッピーコンピューティング!
コメント
コメントはまだありません。最初のコメントを投稿しましょう。