序章

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

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

前提条件

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

  • サーバーにsudo権限が設定されているroot以外のユーザー。CentOS7初期サーバーセットアップガイドに従ってセットアップします。
  • サーバーを指すように構成されたドメイン名。 DigitalOcean チュートリアルでホスト名を設定する方法に従って、ドメインをDigitalOceanドロップレットにポイントする方法を学ぶことができます。
  • 新しいCentOS7サーバーの追加の推奨手順ガイドに従って構成された基本的なファイアウォール。

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

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

前提条件で構成された非rootsudoユーザーとして、ローカルのApache httpdパッケージインデックスを更新して、最新のアップストリームの変更を反映します。

  1. sudo yum update httpd

パッケージが更新されたら、Apacheパッケージをインストールします。

  1. sudo yum install httpd

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

前提条件のセクションに記載されている新しいCentOS7サーバーの追加の推奨手順ガイドを完了すると、サーバーにfirewalldがインストールされ、ポート80ApacheがHTTP経由でリクエストを処理できるようにします。 まだ行っていない場合は、次のコマンドを使用してfirewalldhttpサービスを有効にすることでこれを行うことができます。

  1. sudo firewall-cmd --permanent --add-service=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
Redirecting to /bin/systemctl status httpd.service ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2019-02-20 01:29:08 UTC; 5s ago Docs: man:httpd(8) man:apachectl(8) Main PID: 1290 (httpd) Status: "Processing requests..." CGroup: /system.slice/httpd.service ├─1290 /usr/sbin/httpd -DFOREGROUND ├─1291 /usr/sbin/httpd -DFOREGROUND ├─1292 /usr/sbin/httpd -DFOREGROUND ├─1293 /usr/sbin/httpd -DFOREGROUND ├─1294 /usr/sbin/httpd -DFOREGROUND └─1295 /usr/sbin/httpd -DFOREGROUND ...

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

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

サーバーのコマンドプロンプトで次のように入力します。

  1. hostname -I

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

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

  1. curl -4 icanhazip.com

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

http://your_server_ip

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

Default Apache page for CentOS 7

このページは、Apacheが正しく機能していることを示しています。 また、重要なApacheファイルとディレクトリの場所に関する基本的な情報も含まれています。 サービスがインストールされて実行されたので、さまざまなsystemctlコマンドを使用してサービスを管理できます。

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

Webサーバーが稼働しているので、いくつかの基本的な管理コマンドを見ていきましょう。

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のサーバーブロックと同様)を使用して、構成の詳細をカプセル化し、単一のサーバーから複数のドメインをホストできます。 この手順では、your_domainと呼ばれるドメインを設定しますが、これを独自のドメイン名に置き換える必要があります。 DigitalOceanを使用したドメイン名の設定の詳細については、DigitalOceanDNSの概要を参照してください。

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

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

  1. sudo mkdir -p /var/www/your_domain/html

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

  1. sudo mkdir -p /var/www/your_domain/log

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

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

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

  1. sudo chmod -R 755 /var/www

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

  1. sudo vi /var/www/your_domain/html/index.html

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

/var/www/your_domain/html/index.html
<html>
  <head>
    <title>Welcome to your website!</title>
  </head>
  <body>
    <h1>Success! The your_domain 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に指示します。 これを実現するには、Apacheのメイン構成ファイルを編集し、追加の構成ファイル用のオプションのディレクトリーを宣言する行を追加します。

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

次の行をファイルの最後に追加します。

IncludeOptional sites-enabled/*.conf

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

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

  1. sudo vi /etc/httpd/sites-available/your_domain.conf

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

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

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

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

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

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

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

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

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

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

  1. sudo ls -dZ /var/www/your_domain/log/

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

Output
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/your_domain/log/

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

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

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

  1. sudo restorecon -R -v /var/www/your_domain/log

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

Output
restorecon reset /var/www/your_domain/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/your_domain/log/

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

Output
drwxr-xr-x. root root unconfined_u:object_r:httpd_log_t:s0 /var/www/your_domain/log

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

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

  1. sudo systemctl restart httpd

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

  1. ls -lZ /var/www/your_domain/log

Apacheが仮想ホスト構成で指定されたerror.logおよびrequests.logファイルを作成できたことがわかります。

Output
-rw-r--r--. 1 root root 0 Feb 26 22:54 error.log -rw-r--r--. 1 root root 0 Feb 26 22:54 requests.log

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

Success! The example.com virtual host is working!

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

結論

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

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