序章

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

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

前提条件

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

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

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

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

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

  1. sudo yum update httpd

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

  1. sudo yum install httpd

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

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

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

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

  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 からIPをリクエストするには icanhazip.com、インターネット上の別の場所から見たパブリックIPv4アドレスを提供します。

  1. curl -4 icanhazip.com

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

http://your_server_ip

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

このページは、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では、デフォルトで1つのサーバーブロックが有効になっており、 /var/www/html ディレクトリ。 これは単一のサイトではうまく機能しますが、複数のサイトをホストしている場合は扱いにくくなる可能性があります。 変更する代わりに /var/www/html、内にディレクトリ構造を作成します /var/www のために your_domain サイト、去る /var/www/html クライアント要求が他のサイトと一致しない場合に提供されるデフォルトのディレクトリとして配置されます。

を作成します html のディレクトリ your_domain 次のように、 -p 必要な親ディレクトリを作成するためのフラグ:

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

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

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

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

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

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

  1. sudo chmod -R 755 /var/www

次に、サンプルを作成します index.html 使用するページ vi またはお気に入りの編集者:

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

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

次に、Apacheに仮想ホストを探すように指示します。 sites-enabled ディレクトリ。 これを実現するには、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ポリシーを設定します。

  1. sudo setsebool -P httpd_unified 1

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

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

のSELinux権限を個別に設定する /var/www/your_domain/log ディレクトリを使用すると、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、これは、Apacheプロセスがこのディレクトリに作成されたファイルのみを読み取ることができることをSELinuxに通知します。 このチュートリアルでは、コンテキストタイプを変更します /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

The -R flagはこのコマンドを再帰的に実行します。つまり、新しいコンテキストを使用するように既存のファイルを更新します。 The -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.logrequests.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、次のようなものが表示されます。

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

結論

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

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