Apache httpdの最新バージョンをCentOSにyumでインストール

httpd-ius-install-top

CentOSのベースレポジトリに登録されているApache httpdを利用してのウェブサーバーを構築する手順を、以前の記事で紹介しました。この記事ではCentOSのベースレポジトリに登録されているApache httpdを導入する手順を紹介していますが、ベースレポジトリに登録されているApache httpdは2.4.6とバージョンがやや古いものになります。

Open Source
CentOS 7へApacheをインストールして最短でウェブサーバーを構築

以前のCentOS環境構築に関する記事でCentOSのインストールと基本的な設定までが完了しました。折角、作成した環境。利用しない手はありません。本記事では、以前の記事で構築したCentOSの環境を利用してウェブサーバーであるApacheの ...

2019年4月現在、Apache httpdの最新バージョンは2.4.38までリリースされています。2.4.38では、HTTP通信の効率化を図る機能であるHTTP/2を利用することが出来ます。またSSLの暗号化としてより安全に通信を行うことができるTLSv1.3に対応しているなど、セキュリティ面でもベースレポジトリからインストールできるバージョン2.4.6より機能が向上しています。

本記事ではその最新バージョンである2.4.38をyumで導入する手順を紹介したいと思います。導入についてはそれ程難しい手順はありませんので、是非インストールして最新バージョンのApache httpdを利用してみて下さい。

バージョン2.4.38以降のApache httpdでも同様の手順でインストールを行うことができます。

参考 HTTP/2を有効にするには記事に詳しく説明していますので、参考にして下さい。Apache httpdを最新バージョンにした後にはHTTP/2を有効にすることをオススメします。

Open Source
httpd-http2-top3
ApacheにHTTP/2を設定してサイトの表示速度とパフォーマンスをアップ

RPMパッケージを利用してウェブサーバー「Apache httpd」の最新バージョンをインストールする手順を以下の記事で紹介しました。 Apache httpdの最新バージョンでは「HTTP/1.1」を拡張したプロトコルで通信パフォーマンス ...

1. Apacheの最新バージョンをインストールする環境

Apache httpd最新バージョンを導入するOSとしてはサーバー向けLinuxであるCentOSを利用しています。CentOSの環境作成に関する以下の記事で紹介した部分までの作業が終了している前提で進めていきます。

CentOS
centos76-install-top3
CentOS 7.6をインストール Linuxのインストールは難しくありません

こんにちは、ITエンジニアの小村(@system_kom)です。 Windowsをインストールした経験のある人は多いと思いますが、Linuxをインストール経験がある人は少ないのではないでしょうか。 Linuxのインストールはサーバー構築の基 ...

CentOS
CentOS 7のインストール後におこなうLinuxの基本設定 13ポイント

CentOS 7(バージョン7.0~7.6)のインストール完了後に、設定する最低限のポイントを13点纏めてみました。(2019年6月に追加)本記事で紹介した手順は一例で、これ以外にもサーバーを構築するためには複数の手順が必要になります。まず ...

まだOSの導入と設定が完了していない場合は、上記の記事を参考にして先にCentOSのインストールと基本的な設定を行って下さい。Apache httpdを導入する環境は、上記の記事で詳細に紹介していますが、基本的な部分は以下の通りになります。

Apache httpdをインストールする環境

  • OSのバージョンはCentOSで最新のバージョン7.6(Build1810)
  • CentOS 7系であれば、どのバージョンでも同じ手順で構築が可能
  • サーバーにはグローバルIPアドレス割り当てられています

この環境にApache httpdの最新バージョンを導入していきます。

本記事では一般ユーザーでの実行が可能なコマンドについてはプロンプトとして"$"、rootユーザーでの実行が必要なコマンドについては"#"を記載しています。

2. Apache httpdインストール前の準備

Apacheは通常、httpdという名前でパッケージ化されています。CentOSでは前の記事でも紹介していますが、yumというコマンドでパッケージの導入を行います。ここではApache httpdパッケージをインストールする前に必要となる作業手順を記載します。

2-1. Apache用ユーザーの追加とパスワードの設定

ここからApache httpdの具体的な導入手順を紹介していきます。まずApache httpdを動作させるためにユーザーを追加します。
デフォルトではApacheのインストール時に同名のユーザーである「apache」が作成されますが、これは利用せずに新規でwwwというユーザーを追加します。Apacheユーザーについてはコンテンツアップロード時の権限と、ユーザー名が分かってしまう可能性を考慮して、本記事では利用しません。

ユーザー名としてwwwを設定していますが、ユーザー名は任意になりますのでwww以外でも問題ありません。

2-1-1. Apache用ユーザーの作成

ユーザー追加はuseraddコマンドで行います。-sオプションを付けることでshellを指定しています。
wwwユーザーはサーバーへログインすることがないので、シェルとして"/sbin/nologin"を指定します。成るべくシステムへログインできるユーザーを制限することがセキュリティの基本です。

 command
# useradd -s /sbin/nologin www

エラーが出力されなければ、ユーザーの作成は完了です。

2-1-2. Apacheユーザーへのパスワード設定

続いて、作成したユーザーにパスワードの設定を行います。

 command
# passwd www
ユーザー www のパスワードを変更。
新しいパスワード: (パスワードを入力)
新しいパスワードを再入力してください: (パスワードを再入力)
passwd: すべての認証トークンが正しく更新できました。

設定するパスワードは任意になりますが、なるべく複雑なものを設定することをお勧めします。エラーの出力が無ければパスワードの設定は完了です。

2-1-3. 作成したユーザーの確認

作成したウェブサーバー用のユーザー"www"についての情報を確認します。
/etc/passwdファイルに作成したwwwユーザーの情報が追加されていることを確認します。確認は以下のコマンドで行います。

 command
$ cat /etc/passwd | grep www
www:x:1006:1006::/home/www:/sbin/nologin

続いてidコマンドでユーザーとグループが表示されることを確認します。

 command
$ id www
uid=1006(www) gid=1006(www) groups=1006(www)

wwwユーザーに関する情報が表示されればユーザーの確認は完了です。

2-2. baseパッケージの確認

Apache httpdを動作させるためのユーザー作成が完了したので、次にパッケージを確認します。先ずはCentOSに含まれるhttpdと名前の付くパッケージのリストを確認します。パッケージリストの確認はyum listコマンドで行います。
そのまま実行すると、全てのパッケージリストが表示されますので、抽出用のgrepコマンドでhttpd文字列が含まれるものだけを抜き出します。

 command
$ yum list | grep httpd
httpd.x86_64 2.4.6-88.el7.centos base
httpd-devel.x86_64 2.4.6-88.el7.centos base
httpd-manual.noarch 2.4.6-88.el7.centos base
httpd-tools.x86_64 2.4.6-88.el7.centos base
keycloak-httpd-client-install.noarch 0.6-3.el7 base
libmicrohttpd.i686 0.9.33-2.el7 base
libmicrohttpd.x86_64 0.9.33-2.el7 base
libmicrohttpd-devel.i686 0.9.33-2.el7 base
libmicrohttpd-devel.x86_64 0.9.33-2.el7 base
libmicrohttpd-doc.noarch 0.9.33-2.el7 base
python2-keycloak-httpd-client-install.noarch

上記の出力結果からわかるように、baseレポジトリでインストールできるApache httpdのバージョンは2.4.6になります。Apache httpdの最新バージョンをインストールするためにはhttpdの最新バージョン用レポジトリの追加が必要になります。レポジトリファイルは”/etc/yum.repos.d/”ディレクトリにあります。現状のレポジトリファイルを確認してみます。

 command
$ ls -s /etc/yum.repos.d/
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Sources.repo CentOS-fasttrack.repo
CentOS-CR.repo CentOS-Media.repo CentOS-Vault.repo

上記のレポジトリファイルが存在します。ここにhttpd最新バージョンが登録されているレポジトリを追加します。

2-3. レポジトリの追加

Apache httpdをインストールするために必要なパッケージの一部は、ius(IUS は有志プロジェクトでエンタープライズ Linux 向けに選択された新しいバージョンの RPM パッケージを提供している)レポジトリに含まれています。iusレポジトリを利用するためにius-releaseパッケージをインストールします。

iusレポジトリをインストールするために必要なパッケージの一部は、epel(エンタープライズ Linux 用の拡張パッケージ)レポジトリに含まれています。iusレポジトリをインストールする前にepel-releaseパッケージをインストールします。

2-3-1. epelレポジトリのインストール

epelレポジトリは通常のパッケージと同じくyumコマンドでインストールできます。以下のように実行することでインストールが開始されます。

 command
# yum install epel-release

以下、実行後の応答になります。

 log
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.tsukuba.wide.ad.jp
* extras: ftp.tsukuba.wide.ad.jp
* updates: ftp.tsukuba.wide.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ epel-release.noarch 0:7-9 を インストール
--> 依存性解決を終了しました。
依存性を解決しました
インストール中:
epel-release noarch 7-9 extras 14 k
トランザクションの要約
インストール 1 パッケージ
総ダウンロード容量: 14 k
インストール容量: 24 k
Is this ok [y/d/N]: y
Downloading packages:
epel-release-7-9.noarch.rpm | 14 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
インストール中 : epel-release-7-9.noarch [
検証中 : epel-release-7-9.noarch 1/1
インストール:
epel-release.noarch 0:7-9
完了しました!

エラーの出力がなく「完了しました!」と表示されれば、epelレポジトリは正常にインストールされています。

2-3-2. iusレポジトリ用パッケージのインストール

iusレポジトリはepelレポジトリ用パッケージと同じくyumコマンドでインストールできます。以下のように実行することでインストールが開始されます。
※2020/7/27追記 ウチイダ様よりご指摘をいただきURLを変更致しました。有難うございました。

 command
# yum -y install "https://repo.ius.io/ius-release-el7.rpm"

以下、実行後の応答になります。

 log
/var/tmp/yum-root-j4QBOn/ius-release.rpm を調べています: ius-release-1.0-15.ius.centos7.noarch
/var/tmp/yum-root-j4QBOn/ius-release.rpm をインストール済みとして設定しています
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ ius-release.noarch 0:1.0-15.ius.centos7 を インストール
--> 依存性解決を終了しました。
base/7/x86_64 | 3.6 kB 00:00:00
extras/7/x86_64 | 3.4 kB 00:00:00
updates/7/x86_64 | 3.4 kB 00:00:00
依存性を解決しました
インストール中:
ius-release noarch 1.0-15.ius.centos7 /ius-release 8.5 k
トランザクションの要約
インストール 1 パッケージ
合計容量: 8.5 k
インストール容量: 8.5 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
インストール中 : ius-release-1.0-15.ius.centos7.noarch 1/1
検証中 : ius-release-1.0-15.ius.centos7.noarch 1/1
インストール:
ius-release.noarch 0:1.0-15.ius.centos7
完了しました!

エラーの出力がなく”完了しました!”と表示されれば、iusレポジトリは正常にインストールされています。
この状態だとbaseレポジトリからインストールしたパッケージのアップデートにiusレポジトリが利用されてしまいます。iusレポジトリは最新バージョンのパッケージを利用できるので便利ですが、OSのコア部分まで変更されると不具合が発生する可能性があるので、iusレポジトリを無効にします。
ius.repoファイルを以下のように変更します。

 command
# vi /etc/yum.repos.d/ius.repo
[ius]
name=IUS Community Packages for Enterprise Linux 7 - $basearch
#baseurl=https://dl.iuscommunity.org/pub/ius/stable/CentOS/7/$basearch
mirrorlist=https://mirrors.iuscommunity.org/mirrorlist?repo=ius-centos7&arch=$basearch&protocol=http
failovermethod=priority
enabled=0 1から0に変更する
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/IUS-COMMUNITY-GPG-KEY

enabled=1を0に変更してファイルを保存することでiusレポジトリはyum実行時に参照しなくなります。これでレポジトリの追加は完了です。

2-4. 依存関係のあるパッケージの追加

続いてApache httpdの最新バージョンインストール前に依存関係があるパッケージのインストールを行います。Apache httpdの最新バージョンインストールに必要となるパッケージは以下の5つになります。

最新のApache httpdをインストールするために必要なパッケージ

  • openldap-devel
  • expat-devel
  • libdb-devel
  • mailcap
  • system-logos(Apache httpdの開発ツールをインストールするのに必要)

サーバーの構成によってはインストールされているものもありますが、ここでは上記のパッケージを全てインストールする形で先へすすめます。インストールにはyumコマンドを以下のように実行します。

 command
# yum -y install openldap-devel expat-devel libdb-devel mailcap system-logos

コンソールに「完了しました!」と表示されれば必要なパッケージの導入は完了です。

3. httpdパッケージのインストール

ここからはApache httpdパッケージをインストールしていきます。
本記事ではApache httpdを導入するために以下のパッケージをインストールします。各パッケージは以下のような機能が含まれています。

インストールするパッケージ

  • httpd (httpdウェブサーバー本体)
  • httpd-devel (httpdに関連する開発ツール、モジュールなどのパッケージ)
  • mod_ssl (SSL用モジュール)

3-1. yumコマンドによるhttpdのインストール

Apache httpdのパッケージはyumコマンドにinstallオプションを付けることでインストールすることができます。そのままyumコマンドを実行するとbaseレポジトリからhttpdパッケージを探してくるために、baseレポジトリとbaseに関連するレポジトリを無効(--disablerepo)にして、iusレポジトリのみを有効(--enablerepo)にします。
以下のようにyumを実行します。

 command
# yum -y install --disablerepo=base,extras,updates --enablerepo=ius httpd httpd-devel mod_ssl

上記ではyumコマンドに-yオプションを付けることでインストール時の確認応答を省いています。
パッケージを複数インストールする場合はスペースを入れてパッケージ名を列記します。コマンドを実行すると、以下のようにインストールが開始されます。

 command
# yum -y install --disablerepo=base,extras,updates --enablerepo=ius httpd httpd-devel mod_ssl
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
epel/x86_64/metalink | 4.5 kB 00:00:00
* epel: ftp.iij.ad.jp
* ius: muug.ca
epel | 4.7 kB 00:00:00
(1/2): epel/x86_64/updateinfo | 990 kB 00:00:00
(2/2): epel/x86_64/primary_db | 6.6 MB 00:00:02
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ httpd24u.x86_64 0:2.4.38-1.ius.centos7 を インストール
【略】
インストール中 : apr15u-1.5.2-2.ius.centos7.x86_64 1/10
インストール中 : apr15u-util-1.5.4-3.ius.centos7.x86_64 2/10
インストール中 : apr15u-devel-1.5.2-2.ius.centos7.x86_64 3/10
インストール中 : httpd24u-filesystem-2.4.38-1.ius.centos7.noarch 4/10
インストール中 : apr15u-util-devel-1.5.4-3.ius.centos7.x86_64 5/10
インストール中 : httpd24u-tools-2.4.38-1.ius.centos7.x86_64 6/10
インストール中 : libnghttp2-1.31.1-1.el7.x86_64 7/10
インストール中 : httpd24u-2.4.38-1.ius.centos7.x86_64 8/10
インストール中 : httpd24u-devel-2.4.38-1.ius.centos7.x86_64 9/10
インストール中 : 1:httpd24u-mod_ssl-2.4.38-1.ius.centos7.x86_64 10/10
【略】
インストール:
httpd24u.x86_64 0:2.4.38-1.ius.centos7 httpd24u-devel.x86_64 0:2.4.38-1.ius.centos7
httpd24u-mod_ssl.x86_64 1:2.4.38-1.ius.centos7
依存性関連をインストールしました:
apr15u.x86_64 0:1.5.2-2.ius.centos7 apr15u-devel.x86_64 0:1.5.2-2.ius.centos7
apr15u-util.x86_64 0:1.5.4-3.ius.centos7 apr15u-util-devel.x86_64 0:1.5.4-3.ius.centos7
httpd24u-filesystem.noarch 0:2.4.38-1.ius.centos7 httpd24u-tools.x86_64 0:2.4.38-1.ius.centos7
libnghttp2.x86_64 0:1.31.1-1.el7
完了しました!

コンソールに「完了しました!」と表示されればApache httpdパッケージの導入は完了です。

3-2. httpdインストール後の確認

Apache httpdの最新バージョンがインストールされたことを確認します。インストールされているパッケージはyumコマンドで確認できます。以下のようにyumを実行することで、httpdパッケージがインストールされていることを確認します。

 command
$ yum list installed | grep httpd

出力結果として、以下の5パッケージが表示されることを確認します。

 log
httpd24u.x86_64 2.4.38-1.ius.centos7 @ius
httpd24u-devel.x86_64 2.4.38-1.ius.centos7 @ius
httpd24u-filesystem.noarch 2.4.38-1.ius.centos7 @ius
httpd24u-mod_ssl.x86_64 1:2.4.38-1.ius.centos7 @ius
httpd24u-tools.x86_64 2.4.38-1.ius.centos7 @ius

続いてhttpdがインストールされた場所を確認します。インストールされた場所(パス)を確認するためにはwhichコマンドを利用します。
以下のように実行することでインストールパスを確認できます。

 command
$ which httpd

実行結果は以下のようになります。

 log
/sbin/httpd

この結果から、httpdが/sbin以下にインストールされたことが確認できます。

併せてhttpdのバージョンも確認しておきます。httpdコマンドに-vを付けて実行することでバージョンが表示されます。

 command
# httpd -v
Server version: Apache/2.4.38 (IUS)
Server built: Mar 11 2019 10:30:47

上記のようにIUSからインストールしたApacheのバージョンが表示されれば、最新バージョンのhttpdがインストールされています。
これでApache httpd最新バージョンのインストールが確認できました。

3-3. httpd起動の確認

ここまででApache httpdのインストールと確認が完了しましたので、インストールしたhttpdが起動することを確認します。CentOSでは7系からsystemctlコマンドでサービスの起動・停止を行います。httpdは以下のように実行することで起動できます。

 command
# systemctl start httpd

エラーが出力されなければ、正常にhttpdは起動しています。
systemctlコマンドにstatusオプションを付けて実行することで、起動したサービスの状態について、詳細な情報を取得することができます。
以下が実行例です。

 command
# systemctl status httpd
 httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since 金 2019-04-05 18:44:25 JST; 18s ago
Docs: man:httpd.service(8)
Main PID: 7853 (httpd)
Status: "Running, listening on: port 443, port 80"
CGroup: /system.slice/httpd.service
tq7853 /usr/sbin/httpd -DFOREGROUND
tq7854 /usr/sbin/httpd -DFOREGROUND
tq7855 /usr/sbin/httpd -DFOREGROUND
tq7856 /usr/sbin/httpd -DFOREGROUND
tq7857 /usr/sbin/httpd -DFOREGROUND
mq7858 /usr/sbin/httpd -DFOREGROUND
4月 05 18:44:25 dc01 systemd[1]: Starting The Apache HTTP Server...
4月 05 18:44:25 dc01 httpd[7853]: Server configured, listening on: port 443, port 80
4月 05 18:44:25 dc01 systemd[1]: Started The Apache HTTP Server.

上記では分かり難いかもしれませんが、丸(●)の部分が正常な起動状態の場合、緑色で表示されます。
また、稼働しているプロセスを表示するpsコマンドでもhttpdが起動していることを確認できます。以下のように実行します。

 command
$ ps -aux | grep httpd
root 7853 0.6 0.8 274288 Ss 18:44 0:00 /usr/sbin/httpd -DFOREGROUND
apache 7854 0.0 0.6 514156 Sl 18:44 0:00 /usr/sbin/httpd -DFOREGROUND
apache 7855 0.0 0.4 317484 Sl 18:44 0:00 /usr/sbin/httpd -DFOREGROUND
apache 7856 0.0 0.4 317484 Sl 18:44 0:00 /usr/sbin/httpd -DFOREGROUND
apache 7857 0.0 0.4 317484 Sl 18:44 0:00 /usr/sbin/httpd -DFOREGROUND
apache 7858 0.0 0.4 317484 Sl 18:44 0:00 /usr/sbin/httpd -DFOREGROUND

以上の結果から、httpdが正常に起動することが確認できました。

3-4. httpd自動起動の設定

サーバーの再起動や停止の復旧時に、httpdが自動的に起動するように設定します。サービスの自動起動を設定するにもsystemctlコマンドを利用します。自動起動は以下のようにsystemctlコマンドを実行します。

 command
# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/syst

エラーが出力されなければ、自動起動は設定が完了しています。

続いて自動起動が設定されたことを確認します。こちらもsystemctlコマンドから確認できます。

 command
$ systemctl is-enabled httpd
enabled

実行結果として「enabled」と表示されれば自動起動の設定は完了です。

4. firewallの許可設定

設定したhttpdサービスにインターネット側から接続できるようにTCP80番ポートを許可します。本記事ではhttps用モジュールもインストールしていますが、https設定は別の記事で紹介していますので、ここではhttpのみを対象として設定を進めます。

4-1. firewall-cmdコマンドによる80番ポートのオープン

CentOS7のfirewalldを利用している場合は、以下のように設定を行います。
firewall-cmdコマンドでウェブサーバーの待ち受けポートである80番に外部から接続できるように設定を追加します。コマンドは以下のように実行します。

 command
# firewall-cmd --add-service=http --permanent
success

このコマンドはデフォルトのゾーンであるpublicにhttpのサービスを追加します。publicゾーンはインターフェイスに対して割り当てられていますので、この場合はどのIPアドレスからもhttpへ接続可能になります。
続いて、設定を反映するために再読み込みを実行します。

 command
# firewall-cmd --reload
success

成功するとsuccessと表示されます。設定の確認は以下のコマンドで行います。

 command
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: dhcpv6-client http
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

表示された結果の「services」項目に「http」が追加されていれば、設定の確認は完了です。

5. 動作確認用デフォルトページの表示確認

ここまでの手順でhttpdパッケージに用意された動作確認用のデフォルトページを表示することが出来ます。ご自分の環境で利用されているウェブブラウザから、動作確認用のページが表示できることを確認します。もしhttpdをインストールしたサーバーのIPアドレスが111.8.21.167の場合

http://111.8.21.167

をブラウザへ入力すると、以下のような動作確認用のページが表示されます。

httpd-ius-install-5-2

これで動作確認用のページが表示されることまで、確認が出来ました。
続いてhttpdの設定を行います。

6. httpdの設定

項目5. の手順までで、httpdパッケージの導入までが完了しました。このままでの運用でも問題ありませんが、本記事では運用するにあたって最低限、必要になる設定を行います。設定の前提は以下の通りです。

Apache httpdを設定するうえでの前提条件

  • 動作ユーザーとグループはwwwに変更
  • バーチャルホストは利用せず、ドキュメントルート以下にコンテンツを配置
  • ドキュメントルートは”/home/www/html”に変更
  • インデックスページは表示しないように変更
  • cgi用フォルダは”/home/www/cgi-bin”に変更

この条件に合わせて設定を行っていきます。

6-1. httpd.confの変更

httpdの設定は/etc/httpd/conf以下にあるhttpd.confで行います。
httpd.confの編集前に、既存のファイルをバックアップしておきます。具体的には以下の手順でコピーを行います。

 command
# cd /etc/httpd/conf
# cp -p httpd.conf httpd.conf.org

バックアップの完了後、エディタで設定ファイルを開いて変更を行います。本環境ではOSの標準的なエディタである、viエディタを利用しています。

 command
# vi httpd.conf

6-1-1. 動作ユーザー・グループの変更

66~67行目にあるUserとGroupの設定を変更します。動作ユーザーの設定になります。

 code
#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User Apache
Group Apache

UserGroupパラメータを「Apache」から「www」に変更します。
変更後は以下のようになります。

 code
#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User www
Group www

6-1-2. サーバー管理者のメールアドレス変更

86行目にあるServerAdminの設定を変更します。エラーページに表示されます。

 code
#
# ServerAdmin: Your address, where problems with the server should be
# e-mailed. This address appears on some server-generated pages, such
# as error documents. e.g. admin@your-domain.com
#
ServerAdmin root@localhost

上記の"ServerAdmin root@localhost"の"root@localhost"を任意のメールアドレスに変更します。
本記事では

ServerAdmin webmaster@rem-system.com

に変更しています。変更後の設定部分は以下のようになります。

 code
#
# ServerAdmin: Your address, where problems with the server should be
# e-mailed. This address appears on some server-generated pages, such
# as error documents. e.g. admin@your-domain.com
#
ServerAdmin webmaster@rem-system.com

6-1-3. サーバーのホスト名変更

95行目にあるServerNameを変更します。サーバーを認識するために利用されます。

 code
#
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
#ServerName www.example.com:80

上記の「#ServerName www.example.com:80」からコメントを外して「www.example.com」の部分を、公開用のホスト名に変更します。

FQDNはドメイン名にホスト部分を追加したものになります。(例:www.rem-system.com)

ここでは以下のパラメータを設定しました。

ServerName web01.rem-system.com:80

変更後の設定ファイルは以下のようになります。

 code
#
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
ServerName web01.rem-system.com:80

6-1-4. ドキュメントルートの変更

119行目にあるDocumentRootを変更します。コンテンツの配置場所を指定します。

 code
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/var/www/html"

上記のDocumentRootパラメータ「/var/www/html」を 「/home/www/html」に変更します。変更後は以下のようになります。

 code
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/home/www/html"

6-1-5. ディレクトリの変更 1

124行名にあるDirectoryを変更します。ディレクトリの設定に関する内容です。
ドキュメントルートに合わせて変更します。

 code
<Directory "/var/www">
AllowOverride None
# Allow open access:
Require all granted

上記の Directory "/var/www"Directory "/home/www" へ変更します。

 code
<Directory "/home/www">
AllowOverride None
# Allow open access:
Require all granted

6-1-6. ディレクトリの変更 2

131行目にある

 code
<Directory "/var/www/html">

を変更したディレクトリに合わせて変更します。ディレクトリは「/home/www/html」になりますので、以下のようになります。

 code
<Directory "/home/www/html">

併せて、Optionsを変更します。デフォルトでは

 code
Options Indexes FollowSymLinks

となっているオプション設定から"Indexes"を削除して

 code
Options FollowSymLinks

に変更します。

6-1-7. スクリプトエイリアスの変更

247行目にあるスクリプトエイリアスの設定を変更します。CGIを配置する場所を指定します。CGIを利用しない場合には必須ではありませんが、ここでは利用する前提で設定を行います。

 code
#
# ScriptAlias: This controls which directories contain server scripts.
# ScriptAliases are essentially the same as Aliases, except that
# documents in the target directory are treated as applications and
# run by the server when requested rather than as documents sent to the
# client. The same rules about trailing "/" apply to ScriptAlias
# directives as to Alias.
#
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

上記の設定パラメータにあるScriptaAliasのパスを

 code
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

変更したディレクトリパラメータに合わせて設定します。以下のように設定パラメータを変更します。

 code
ScriptAlias /cgi-bin/ "/home/www/cgi-bin/"

6-1-8. CGI用ディレクトリの変更

255行目にある <Directory "/var/www/cgi-bin">を変更します。CGIディレクトリの権限設定です。

 code
#
# "/var/www/cgi-bin" should be changed to whatever your ScriptAliased
# CGI directory exists, if you have that configured.
#
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Require all granted

上記のディレクトリパラメータを、設定したディレクトリに合わせて変更します。

 code
<Directory "/var/www/cgi-bin">

以下のよう変更します。

 code
<Directory "/home/www/cgi-bin">

ここまでの8点で設定ファイルの変更は完了です。変更したファイルを保存してください。
本記事では最短でテスト用ページが表示できることを目標にしています。実際の運用にあたってはもう少しセキュリティを強化するための設定を行うことをお勧めします。

参考 Apache httpdのお勧めセキュリティ設定は以下の記事で紹介しています。

Open Source
httpd-10point-setting-sam
攻撃を受ける前に見直すApacheの基本的なセキュリティ10のポイント

こんにちは、ITエンジニアのKomuraです。 ウェブサーバーにApache HTTPDを採用している環境、まだまだ多いですよね。このApache HTTPDですが、インストールはRPM等のパッケージからコマンド一発で完了しますので、導入の ...

併せて参考にして下さい。

6-2. httpd.confの確認とドキュメントルート用フォルダの作成

項目6-1. で設定ファイルの変更を完了しました。変更したファイルに間違いが無いかを確認します。設定ファイルの確認はhttpdに -tオプションを付けることで可能です。以下のように実行します。

 command
# httpd -t

このコマンドを実行すると、現状のサーバーでは以下のようなエラーが出力されます。

 log
AH00526: Syntax error on line 124 of /etc/httpd/conf/httpd.conf:
DocumentRoot '/home/www/html' is not a directory, or is not readable

これは「/home/www/html」ディレクトリが無いことが原因です。設定ファイルに記載されているドキュメントルートを「/home/www/html」に変更したので、ディレクトリの作成が必要になります。
以下の手順で/home/www以下にhtmlとcgi-binディレクトリを作成します。
まずディレクトリの作成を行います。

 command
# cd /home/www
# mkdir html cgi-bin

続いて作成したhtmlとcgi-binディレクトリにアクセス権を設定します。

 command
# chown www:www html cgi-bin

ディレクトリの作成とアクセス権設定後、再度、httpd.confのファイルを確認するコマンドを実行します。

 command
# httpd -t
Syntax OK

今度は「 Syntax OK」と表示されます。設定ファイルの正常性が確認できました。これで設定ファイルの確認は完了です。

6-3. 不要な設定ファイルの移動

httpdはインストール時に、運用には不要な設定ファイルが自動的に作成されています。
/etc/httpd/conf.d/以下に含まれる autoindex.confとwelcome.confはセキュリティに問題があるためリネーム(ファイル名の変更)か削除することをオススメします。ここでは上記の二つのファイルについて、リネームを実行して、設定ファイルを無効化します。
ディレクトリの移動を行います。

 command
# cd /etc/httpd/conf.d
# ls
README autoindex.conf manual.conf userdir.conf welcome.conf

mvコマンドでファイル名のリネームを行います。

 command
# mv autoindex.conf autoindex.conf.org
# mv welcome.conf welcome.conf.org

不要なconfファイルの名前の変更が、これで完了しました。

6-4. 設定ファイル、変更の反映

設定ファイルの変更が完了しましたので、変更した設定を反映するためにhttpdを再起動します。systemctlコマンドを以下のように実行します。

 command
# systemctl restart httpd

再起動後にhttpdのステータスを確認します。

 log
# systemctl status httpd
 httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since 土 2019-04-06 17:16:58 JST; 7s ago
Docs: man:httpd.service(8)
Main PID: 9178 (httpd)
Status: "Started, listening on: port 443, port 80"
CGroup: /system.slice/httpd.service
tq9178 /usr/sbin/httpd -DFOREGROUND
tq9179 /usr/sbin/httpd -DFOREGROUND
tq9180 /usr/sbin/httpd -DFOREGROUND
tq9181 /usr/sbin/httpd -DFOREGROUND
tq9182 /usr/sbin/httpd -DFOREGROUND
mq9183 /usr/sbin/httpd -DFOREGROUND
4月 06 17:16:58 web01 systemd[1]: Stopped The Apache HTTP Server.
4月 06 17:16:58 web01 systemd[1]: Starting The Apache HTTP Server...
4月 06 17:16:58 web01 httpd[9178]: Server configured, listening on: port 4...80
4月 06 17:16:58 web01 systemd[1]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.

正常に起動していることが上記から確認できます。ここまでで、httpdについて最低限の設定が完了しました。

7. テスト用ページの作成と確認

ここまででApache httpdの基本的な導入とインターネット側からアクセスするためのファイアウォール設定が完了しました。しかし、このままではブラウザでウェブページを開いても、以下のエラーで表示されません。

centos-httpd-inst-7

これはwelcome.confというデフォルトページを表示するための設定ファイルをリネームしたことが理由です。代わりに動作確認用としてテストページを表示させるための簡単なHTMLファイルを作成します。

7-1. ドキュメントルートへの移動

テスト用のページはドキュメントルートに配置します。ドキュメントルートは項目6-1-4. で”/home/www/html”に変更しました。
ここへcdコマンドで移動します。

 command
# cd /home/www/html

7-2. テスト用のページの作成

続いてテスト用のHTMLファイルであるindex.htmlファイルを作成します。

 command
# vi index.html
test page

作成後、index.htmlファイルを保存します。保存後に作成したindex.htmlファイルのアクセス権を変更します。

 command
# chown www:www index.html

これでテストページ用HTMLファイルの作成は完了です。ブラウザで再度、テスト用ページの表示を確認します。

http://111.8.21.167

以下のように作成したテスト用ページが表示できればApache httpdの導入は完了です。

centos-httpd-inst-7-2

8. まとめ

以上、7項目に渡ってCentOSへ最新バージョンのApache httpdをインストールする手順を紹介しました。
本記事で紹介した手順は最新バージョンのApache httpdを導入することにポイントを置いていますので、SSL化バーチャルホストの設定は含まれていません。出来れば最低限の設定としてSSL化は行っておきたいところです。
SSL化とあわせてHTTP/2を有効にするための設定を以下の記事で紹介しています。次に参照する記事としてはこの記事をお勧めします。

Open Source
httpd-http2-top3
ApacheにHTTP/2を設定してサイトの表示速度とパフォーマンスをアップ

RPMパッケージを利用してウェブサーバー「Apache httpd」の最新バージョンをインストールする手順を以下の記事で紹介しました。 Apache httpdの最新バージョンでは「HTTP/1.1」を拡張したプロトコルで通信パフォーマンス ...

また、ここ最近ではApache単体ではなくPHPなどのアプリケーションサーバーと連携して動作するようなパターンが増えています。ApacheとPHPで動作する代表的なCMSであるWordPressなどもその中に含まれます。
PHPのインストールと基本的な設定については、以下の記事で詳しく紹介しています。

Open Source
centos-httpd-php73-top
CentOS 7にPHP 7.3をインストールしてApache HTTP Serverと連携させる方法

こんにちは、ITエンジニアの小村(@system_kom)です。 以前のブログ記事でCentOS上にSSL対応したApache httpdの環境を作成してPHP7.2をインストールする手順を紹介しました。 2018年5月当時に書かれた、前回 ...

是非、ApacheだけでなくPHPも導入してアプリケーションサーバーとしての環境を作成してみて下さい。PHPのプログラム言語を学ぶPHP入門環境の作成にもオススメです。

  • この記事を書いた人
rem-profile-photo

レムシステム

レムシステムはPC・サーバー・ネットワークでの業務効率化を主な業務としている会社です。全国に対応しています。

-Apache, CentOS
-