apacheでwebサーバーを運用していく上で役立つ知識!
前回の記事ではWebサーバーの概要や初心者がApacheをLinuxにインストール、初期設定をする方法について解説しました。
Apacheの初心者でも分かりやすくインストール方法を解説①
この記事では第二弾として実際にapacheでwebサーバーを運用していく上で役立つ知識を紹介していきます。
apacheの再起動には注意!設定変更はreloadを使おう
見事apacheを起動してWEBサービスを動かしている状態で、後から設定を変更したくなることはよくあります。
httdp.confなどの設定ファイルを変更してもその設定ファイルはすぐに反映されるわけではありません。実験的な段階であれば再起動をかけてしまっても何も問題はありませんが、すでにサービスが起動している状態では再起動によって一時的にWEBサービスが使えなくなる恐れがあります。
apaceの設定を反映させる方法としては
- systemctl restart httpd (service httpd restart)
- apachectl -k graceful
- systemctl reload httpd
などがあります。下に行くにつれて穏やか?な再起動になります。
普通にrestartとすると今動いているプロセスも中断させられてしまいますが、gracefulを使った再起動では処理中のリクエストが終了してから再起動がかかるためより穏やかに再起動できます。reloadは処理が中断されずに設定ファイルの読み直しを行います。
CentOS7などではgracefulが使えないようです。設定ファイルの読み込みではreload、実験的環境構築の段階ではrestartを使えばよさそうですね。
参考 Apache HTTP Server の停止と再起動 - Apache HTTP サーバ バージョン 2.4取得できませんでした
Includeディレクティブの設定を使ってhttpd.confをコンパクトにする
メインのhttpd.confに設定ファイルを書きすぎると肥大化して、可読性が悪くなったり、動作が遅くなってしまったりします。
その場合Includeディレクティブを使って外部に書いたconfファイルをメインのhttpd.confに読み込ませればメインのhttpd.confファイルをコンパクトにできます。
つまり、/etc/httpd/conf/httpd.confに読み込ませたい別のexample.com.confを読み込ませるために以下のようにhttpd.confにincludeディレクティブにexample.com.confのパスを書きます。
Include /home/komeyan/httpd/conf.d/example.com.conf
上のように絶対パスで指定するか、Serverrootで設定したパスからの相対パスで指定します。
外部のconfファイルを読み込むメリットは
- メインのhttpd.confをコンパクトにできる
- 設定を状況に合わせて変更したい時confファイルの読み込みを変えるだけで変更できる
- 設定ファイルの管理がしやすい(機能の追加•変更が容易、誤編集による影響を最小限にできる)
- 設定が少ない場合は逆に管理が面倒
があります。
Ifmoduleでモジュールを追加する時も外部から読み込む設定にした方が管理しやすいです。
apacheのログやプロセスを確認してエラー原因を特定する
構築したwebサーバーも起動したら最後そのままずっと動き続けるわけではありません。ずっと動かし続けるにはサーバーのメンテナンス作業が必要になります。
apcheがきちんと動作しているか?不明なエラーが起きた時に原因を特定したり、エラーが出ていないか管理するのに便利なコマンドや方法を紹介します。
apacheの起動確認
psコマンドでプロセスを確認
apacheの起動確認にはたくさんの方法があります。まずはプロセスを確認する方法を紹介します。プロセスの確認はpsコマンドで確認します。
apacheというアプリケーションはhttpdというプロセスが動いてwebサーバーを動かしています。プロセスが動いていなければapacheは止まってしまっているといえます。
# ps aux | grep httpd
pi 21285 0.0 0.0 3916 564 pts/0 S+ 19:36 0:00 grep --color=auto httpd
ps auxコマンドでプロセスが上がっているのが確認できたらとりあえず動いていることが確認できます。
netstatコマンドで確認
一つのサーバーマシンではポートを使い分けることによって複数のサーバーアプリを起動できます。webサーバーは80番ポートで通信を待ち受けています(listen)。プロセスが待機している状態であればapacheが起動していることを意味しています。
ポートの状態を確認するにはnetstatコマンドを使います。
# netstat -anput | grep httpd (ubuntuではapache2)
tcp6 0 0 :::80 :::* LISTEN 5869/httpd
上のように80番ポートでhttpdプロセスが待機状態であるため起動しています。
systemctlコマンドで起動を確認
systemctlコマンドはCentOS7など最新のLinuxディストリビューションで採用されているシステム管理デーモンsystemdで利用できます。CentOS6ではinitが採用されているのでsystemctlではなくservice httpd status
で確認します。
#systemctl status httpd (apache2)
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset:
Active: active (running) since Wed 2020-07-08 20:41:02 JST; 3 days ago
Docs: https://httpd.apache.org/docs/2.4/
Process: 6860 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCE
Process: 5865 ExecReload=/usr/sbin/apachectl graceful (code=exited,
...~
runningとなっていれば起動中であることが確認できます。enabledとなっている部分は自動起動ONを意味しています(disabledで自動起動OFF)。
ログの確認
エラーが出た時にログを確認するのは基本です。一般的にログは/var/logディレクトリに溜まります。
httpdのログは/var/log/httpdにあります。エラーログはerror_logに溜まります。アクセスログはaccess_logに溜まります。
アクセスログ(access_log)はwebサーバーに対するリクエストに関する記録が記載されています。
# less /var/log/httpd/access_log
# less /var/log/apache2/access.log
エラーログ(error_log)は何らかのエラーが起きた時に記録されるログです。権限で拒否されたなどの情報が記録されます。
# less /var/log/httpd/error_log
# less /var/log/apache2/error.log
アクセスが多いサーバーではログファイルが肥大化してリソースを圧迫します。防止するにはローテーションを行います。