CentOS7へWebサーバー(Apache)をインストールしよう

 WebサーバーはApache HTTP Server(Apache)をインストールします。

 最近は軽量・高パフォーマンスのnginx(エンジンエックス)で静的コンテンツを処理し、動的コンテンツ(phpやcgi)等をApache HTTPへ廻すことで大量リクエストを捌いたり、より少ないメモリでの動作させるなどしているようです。
今回はすぐに立てたいし、個人のサーバーですからね。後々試そうと思います。

 CentOS 7のyumでそのままインストールできるApache HTTPのバージョンは2.4.6なのですが、HTTPS通信を高速に処理するための仕組みHTTP/2は2.4.17以降で対応とのことです。
よって後々試そうと思いますが、HTTP/2を有効にすると使用するメモリが増えるということなのでこのサーバーではそのままかもしれん。

Apache HTTPをインストールしよう

 まずはさくっとインストールします。

# yum install httpd

インストールされたパッケージは次の通りです。

Dependencies Resolved
=============================================================================================================================
Package Arch Version Repository Size
=============================================================================================================================
Installing:
httpd x86_64 2.4.6-90.el7.centos base 2.7 M
Installing for dependencies:
httpd-tools x86_64 2.4.6-90.el7.centos base 91 k
mailcap noarch 2.1.41-2.el7 base 31 k

Transaction Summary
=============================================================================================================================
Install 1 Package (+2 Dependent packages)

続いてApache HTTP を自動起動に登録し、起動します。

# systemctl enable httpd
# systemctl start httpd

起動状態を"systemctl status httpd"で確認します。

# systemctl status httpd

202004_apache_active.png

正常に起動できていると "active (running)"を緑で表示します。もしエラーが発生していると該当箇所が暗赤で表示します。

 DNSにサーバーのドメインが未登録でも"http://vpsに割り当てられたIPアドレス/"をWebブラウザで開けば、次の画面を表示するはずです。
このページは、定義ファイル"/etc/httpd/conf.d/welcome.conf"により、ディレクトリ"/usr/share/httpd/noindex"内を表示しています。

202004_httpd_welcome.png

もっともパケットフィルタとファイアウォールを開いていないと、Webブラウザは何も表示せずにタイムアウトしていることと思います。
さくら側のパケットフィルタとサーバーのファイアウォールのポート(80番、443番)が閉じているからです。

ポート80/443を開放しよう

 まずはさくらのVPSコントロールパネルより、パケットフィルタの設定でWebをチェックしてください。

202004_pakectfilter_open_http.png

 次にサーバー・ファイアウォールのhttpおよびhttpsの各ポートを開きます。

$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --add-service=https --permanent
$ sudo systemctl restart firewalld

httpおよびhttpsが開放されたことを確認します。

$ sudo firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: dhcpv6-client http https ssh ssh-spec

これで再度Webブラウザで開き表示されればOKです。"welcome.conf"をそのまま残しておくと "/.noindex.html"をアクセスで上の画像を表示してしまいます。削除するかファイル名を変えてApacheからアクセスされないようにします。welcome.conf内はすべてコメントアウトします。

$ sudo vim /etc/httpd/conf.d/welcome.conf

(すべてコメントアウト)

公開用ディレクトリをセットアップしよう 

 公開用のディレクトリをセットアップします。
今回は、ユーザーディレクトリ下に"www"を作成し、各コンテンツを配置します。fooは自分のユーザー名と置き換えてください。

/home/foo
  └ www
    ├ htdocs ドキュメントルート(html や publicというひともいますね)
    ├ log   アクセスログ
    └ cgi-bin (必要であれば。Perlスクリプト等を置きます)

歴史的慣習だと思うのですが、"/home"を"/usr/home"でもアクセスできるようシンボリックリンクを作成していることが多くみられますのでそれを設定します。実際"/usr/home/~"とするWebアプリケーションが見られます。作成を間違えるとおかしなことになるので要注意です。別に無くともと思いますが...

$ sudo ln -s /home/ /usr/home
$ ls -l /usr | grep home
lrwxrwxrwx 1 root root 6 Apr 1x 16:35 home -> /home/

ユーザーホームディレクトリのデフォルトパーミッションは 700 なのでこのままではApache HTTPからアクセスできません。パーミッションを変更します。

$ chmod 755 /home/foo

次に、~/www 以下のディレクトリを作成します。ドキュメントについては、CMS等を利用するときにhttpdのアカウント(apache)がファイルを生成することがあるので、パーミッションを777へ変更します。静的コンテンツを使用するのみであればパーミッションの変更は必要ありません。運用でパーミッションに主張を持っていられる方もいるでしょうが、ここはひとりサーバーなので...

$ cd ~
$ mkdir www
$ mkdir www/htdocs
$ chmod 777 www/htdocs
$ mkdir www/log
$ mkdir www/cgi-bin
$ ls -l www
total 12
drwxr-xr-x 2 earth earth 4096 Apr 1x 10:29 cgi-bin
drwxrwxrwx 2 earth earth 4096 Apr 1x 10:29 htdocs
drwxr-xr-x 2 earth earth 4096 Apr 1x 10:29 log

次に、Apacheの設定ファイル "/etc/httpd/conf/httpd.conf"を編集し、いくつか変更します。変更前にバックアップを取り、編集します。

sudo cp -p /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
sudo vim /etc/httpd/conf/httpd.conf

変更は次の通りです。(変更部分はコメントで残しておきます。()内は説明書き)

(もし、文字コードにShift-JISなどが存在するときはコメントアウト、あるいは個別に文字コードを設定)
AddDefaultCharset UTF-8

(デフォルトのエラーログ出力先を設定。fooは読み替えてください)
#ErrorLog "logs/error_log"
ErrorLog "/usr/home/foo/www/log/error_log"

(Perlスクリプトを使用するとき)
# To use CGI scripts outside of ScriptAliased directories:
# (You will also need to add "ExecCGI" to the "Options" directive.)
#
#AddHandler cgi-script .cgi
AddHandler cgi-script .cgi

(以下は追記)
(ドメイン毎に定義ファイルを記述するために準備)
IncludeOptional domain.d/*.conf

(サーバーバージョンなど出力しない)
ServerSignature Off
ServerTokens Prod

各ドメインの定義ファイルを保存するディレクトリを、"domain.d"で準備します。なぜこの名前かは、仕事上サーバー管理を委託していた会社がそうだっただけで他意はありません。他の定義と混在するよりは分けた方が無難だと思います。

$ cd /etc/httpd
$ sudo mkdir domain.d
$ ls
conf conf.d conf.modules.d domain.d logs modules run

Apache HTTPは、定義ファイルを"/etc/httpd/httpd.conf"内のIncludeディレクティブやIncludeOptionalディレクティブの出現順位により検索します。ディレクトリ内はファイル名順です。多くの定義は後から出現した設定で上書きされます。次のページは分かりやすかったので(Apache 2.2ですが)。

実際の順位は、httpd.confの初期設定だと、 "conf.modules.d/*.conf"、"conf.d/*.conf"、追加した "domain.d/*.conf"となります。

"domain.d/"に二つのファイルを作成します。(fooやexsample.comは読み替えてください)
"00-default.conf"はIPアドレスでアクセスしたとき表示します。

/etc/httpd/domain.d/00-default.conf

<VirtualHost _default_:80>
ServerName VPSのIPアドレス
DocumentRoot /usr/home/foo/www/htdocs
CustomLog /usr/home/foo/www/log/access_log combined env=!nolog
ErrorLog /usr/home/foo/www/log/error_log
<Directory "/usr/home/foo/www/htdocs">
Require all granted
</Directory>
</VirtualHost>

"/cgi-bin/"が不要な方は削除してください。そのときはhttp.conf内の"/cgi-bin/"定義もコメントアウトしたほうがよいかと思います

/etc/httpd/domain.d/01-exsample.conf

<VirtualHost *:80>
ServerName www.exsample.com
ServerAlias exsample.com
DocumentRoot /usr/home/foo/www/htdocs
CustomLog /usr/home/foo/www/log/access_log combined env=!nolog
ErrorLog /usr/home/foo/www/log/error_log
Alias /cgi-bin/ "/usr/home/foo/www/cgi-bin/"
<Directory /usr/home/foo/www/htdocs>
Options FollowSymLinks ExecCGI
AllowOverride All
Require all granted
</Directory>
<Directory /usr/home/foo/www/cgi-bin>
Options FollowSymLinks ExecCGI
AllowOverride All
Require all granted
</Directory>
</VirtualHost>

設定ファイルや定義ファイルを更新したのでApache HTTPを再起動します。

$ sudo systemctl restart httpd

これで、"/usr/home/foo/www/htdocs"に"index.html"を配置すれば、ウェブブラウザで"http://www.exsample.com/"(読み替えてください)とすれば表示できるはずです。

コンテンツファイルを配置するためには、sftpクライアントが必要ですね。

autoindexを解除

 初期設定ではautoindexが有効になっていました。有効なままだとディレクトリにindex.htmlなどのデフォルトドキュメントが存在しない場合、ディレクトリのファイルリストが表示されてしまいます(1990年代のWeb黎明期によくありました)。

202004-autoindex-enable.png

無効とするには、"/etc/httpd/conf.modules.d/00-base.conf"ファイルの"mod_autoindex.so"をロードする行をコメントアウト、"/etc/httpd/conf.d/autoindex.conf"ファイルをリネームして読み込まないようにします内をすべてコメントアウトします(autoindex.confをリネームや削除すると後の yum update で復活することがある)。

$ sudo vim /etc/httpd/conf.modules.d/00-base.conf

(次の行をコメントアウト)
#LoadModule autoindex_module modules/mod_autoindex.so
$ sudo vim /etc/httpd/conf.d/autoindex.conf

(すべてコメントアウト)

ドキュメントルートを空の状態でWebブラウザでアクセスし、Not Found表示を確認すればautoindexは解除されました。

  1. SSHクライアントを用意しよう
  2. さくらのVPSコントロールパネルからCentOS 7をインストールしよう
  3. CentOS7を初期セットアップしよう
  4. SSHログインで公開鍵認証を使おう
  5. CentOS7へWebサーバー(Apache)をインストールしよう
  6. CentOS7へTLS/SSL(Let's Encrypt)を導入しよう
  7. CentOS7へPHP(7.4)をインストールしよう
  8. CentOS7へMariaDBをインストールしよう
  9. CentOS7へメールサーバー(Postfix/Dovecot)をインストールしよう

前へ

SSHログインで公開鍵認証を使おう

次へ

CentOS7へTLS/SSL(Let's Encrypt)を導入しよう