Part 5まででとりあえずサーバーは稼働するが、アクセス過多等によりhttpサーバーが不安定になる事もあるので、アクセス制限やhttpd等のサービスが停止してしまった場合にそれを監視し、自動的に再起動をかける監視サービスを追加しておく。
アクセス制限
参考にしたサイト:
http://server-setting.info/centos/apache_mod_limitipconn.html
アクセス制限にはmod_limitipconnを使用する。モジュールをインストールする。
yum --enablerepo=epel install -y mod_limitipconn
設定ファイルの最後にアクセス制限を記述する。下記例では同一IPから同時に最大20アクセス、zipなどのファイルであれば3アクセスに制限している。
vi /etc/httpd/conf.d/limitipconn.conf
<IfModule mod_limitipconn.c> <Location /> MaxConnPerIP 20 NoIPLimit image/* </Location> <FilesMatch "\.(zip|mp?g|iso)$"> MaxConnPerIP 3 </FilesMatch> </IfModule>
httpdサーバーを再起動すれば自動的に設定が読み込まれ制限がかかる。
service httpd restart
接続確認はabコマンドで行う。接続先URLには最後に「/」を付けておく。
ab -n 100 -c 30 https://programresource.net/
サービス監視
参考にしたサイト:
http://server-setting.info/centos/monit_apache_1.html
http://server-setting.info/centos/monit_apache_2.html
サービスの監視にはmonitを使用し、サービスが生きている事を確認する。サービスが停止している場合、再起動をかける。また、メールで監視の開始/停止、障害発生の状況を連絡する事が出来る。
モジュールをインストール。
yum --enablerepo=epel install -y monit
httpdの監視にはalive.htmlにアクセスし取得できるか確認するので、下記内容をalive.htmlとして保存し、自サーバーのルートあたりにおいておく。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Alive</title> </head> <body> <h1>this site is alive. </h1> </body> </html>
監視設定ファイルは「/etc/monit.d」に作成し保存する。筆者の場合、dovecot、httpd、mysql、postfixを監視対象とし、sendalertにメール通知設定を記述している。詳細については上記参考サイトを参照して欲しい。
check process dovecot with pidfile /var/run/dovecot/master.pid start program = "/etc/init.d/dovecot start" stop program = "/etc/init.d/dovecot stop" if failed port 110 protocol pop then restart group dovecot
check process httpd with pidfile /var/run/httpd/httpd.pid start program = "/etc/init.d/httpd restart" stop program = "/etc/init.d/httpd stop" if failed host exampledomain.net port 80 protocol HTTP request /alive.html then restart group httpd
check process mysql with pidfile /var/run/mysqld/mysqld.pid start program = "/etc/init.d/mysqld start" stop program = "/etc/init.d/mysqld stop" if failed port 3306 protocol mysql then restart group mysql
check process postfix with pidfile /var/spool/postfix/pid/master.pid start program = "/etc/init.d/postfix start" with timeout 60 seconds stop program = "/etc/init.d/postfix stop" if failed port 25 protocol smtp then restart group postfix
set alert example@gmail.com with mail-format { from: admin@example.net subject: $SERVICE $EVENT at $DATE message: Monit $ACTION $SERVICE at $DATE on $HOST: $DESCRIPTION. } set mailserver example.net port 25 username "admin@example.net" password "パスワード"
設定ファイル作成後、monitサービスの開始及び自動起動を有効にしておく。
/etc/init.d/monit start chkconfig monit on
monitの状態を確認したい場合、
monit status
で確認できるが、statusを確認するにはmonit.confの以下の行のコメントアウトを外しておく必要がある(外しておかないと「monit: error connecting to the monit daemon」と表示される)
set httpd port 2812 allow localhost
後は自分の好みに合わせてカスタマイズを行う。
サクラVPSは完全に自力でゼロからサーバーを立ち上げるため自由度は高いが、設定やトラブル時に対処する知識と腕前は必要となるためLinuxのコマンドやネットワーク通信の仕組み、セキュリティについては勉強しておこう。
今回Part 1から6まで筆者が行った設定を覚え書き箇条書き程度に説明したが、参考元サイトにはより詳しく、メールフィルタリングの説明等も解説されているので参考元サイトも一通り目を通しておく事をお勧めする。