#contents *はじめに [#f39fdd7f] このページでは、httpdサービス(apache)を異なる設定で複数起動させる方法を紹介する。また、serviceやchkconfigに対応し、通常のapacheと同様の手順で起動/停止が行える簡単な設定方法も紹介する。OSはCentOS6.3を前提にしている。 *背景 [#lcd93c8f] 番組予約システムepgrecでは、apacheにシェルのコマンド実行権限を与える必要があり((タイマー予約にatコマンドを使用するため))、セキュリティが低下する((PHPやCGIの脆弱性を突かれた場合、コマンド実行権限が簡単に奪取されてしまうため))。&br; 公開サーバーでepgrecを導入する場合、このセキュリティの低下を回避する対策が必要となる。 *対策方法 [#x2ff4706] 公開サーバーのセキュリティを確保しつつ、epgrecを導入するにはいくつかの方法がある。 +公開サーバーと録画サーバーを分ける +epgrecを仮想サーバーで運用する +apacheを異なる権限で複数起動する 1は当然コストがかかる。2は低コストだが、epgrecのためだけにメモリやディスクを消費することになるため、オーバーヘッドが大きい。&br; 1はシンプルな方法で、2台目サーバーの調達コストや電気代が必要になり、また、管理の手間も増えるし、これができるならば何も悩む必要はない。2は低コストだが、epgrecのためだけに仮想サーバー1台分のメモリとディスクを消費することになるため、少しもったいない。&br; 3は公開用apacheの他に、もう1つプライベート用apacheを起動させる。設定をいくつか書き換えるだけで比較的簡単で、なおかつ必要なリソースはほんの少しのメモリで済むため、ここでは3の方法について説明する。 *プライベート用apacheを起動する方法 [#if3fabf4] CENTOSでは、apacheの起動に以下の設定ファイルが関係している。 -/etc/init.d/httpd -/etc/sysconfig/httpd -/usr/sbin/apachectl -/etc/httpd(ディレクトリ配下。httpd.conf等) ここから、それぞれのファイルの設定手順を説明する。 以下、rootで作業する $su - **init.d内の設定ファイルの作成 [#lf3fed20] #cp -p /etc/init.d/httpd /etc/init.d/phttpd phttpdを編集する。 if [ -f /etc/sysconfig/phttpd ]; then <httpdをphttpdに> . /etc/sysconfig/phttpd <httpdをphttpdに> fi apachectl=/usr/local/sbin/apachectl </usr/sbinを/usr/local/sbinに> httpd=${HTTPD-/usr/sbin/httpd} prog=phttpd <httpdをphttpdに> pidfile=${PIDFILE-/var/run/httpd/phttpd.pid} <httpdをphttpdに> lockfile=${LOCKFILE-/var/lock/subsys/phttpd} <httpdをphttpdに> RETVAL=0 STOP_TIMEOUT=${STOP_TIMEOUT-10} **sysconfig内の設定ファイルの作成 [#dbf77564] #cp -p /etc/sysconfig/httpd /etc/sysconfig/phttpd phttpdを2ヶ所編集する。 OPTIONS="-f /etc/httpd/conf/phttpd.conf" PIDFILE=/var/run/httpd/phttpd.pid **apachectlの作成 [#u9fe41f6] apachectlを/usr/local/sbinにコピーする。 #cp -p /usr/sbin/apachectl /usr/local/sbin/ コピーしたapachectlを編集する。 STATUSURL="http://localhost:8080/server-status" <":8080"を追加> if [ -r /etc/sysconfig/phttpd ]; then <httpdをphttpdに> . /etc/sysconfig/phttpd <httpdをphttpdに> fi **httpd.confの作成 [#m1d0cee3] #cp -p /etc/httpd/conf/httpd.conf /etc/httpd/conf/phttpd.conf phttpd.confは使用者によって様々な設定になるので、ここではepgrecに関する項目だけピックアップする。 PidFile run/phttpd.pid Listen 8080 <ポートは公開用apacheと違う番号に設定する> Include conf.d/php.conf <不要な設定ファイルは読み込まず、php.confだけを指定> User jack <ここで一般のログインユーザーを指定する。無い場合はユーザーを作る> Group jack DocumentRoot "/var/www/phtml" <外部用apacheと異なるフォルダを指定する> ErrorLog logs/error2_log <ログファイルの名前を変える> CustomLog logs/access2_log <ログファイルの名前を変える> #epgrecファイルの設定 <Directory "/var/www/phtml/epgrec"> #AuthType Basic <パスワードをかける場合はこの4行の#を消す。公開用サーバーでは必ずパスワードをかける事> #AuthName "Private" #AuthUserFile /etc/httpd/conf/htpasswd #Require valid-user AddHandler php5-script .php <phpファイルの動作を指定> AddType text/html .php <phpファイルの動作を指定> DirectoryIndex index.php Options FollowSymLinks AllowOverride None </Directory> これでapacheの設定は完了した。 *ついでにphpのセキュリティも高くする [#fdcb2611] CENTOSのデフォルト設定ではWebで公開している全ディレクトリに対して、PHPファイルの実行を許可している。PHPが必要なディレクトリで個別の設定が必要になるが、セキュリティを確保するためPHPの実行を制限する。 #vi /etc/httpd/conf.d/php.conf #AddHandler php5-script .php <この3行をコメントアウトする> #AddType text/html .php #DirectoryIndex index.php *apacheの試運転 [#w237d601] これまでの設定で問題が無いかどうかの確認のため、プライベート用apache(phttpd)を起動してみる。 #service phttpd configtest Syntax OK <これが表示されたらphttpd.confはOK> #service phttpd start phttpdを起動中: [OK] 試しに、クライアントマシンからブラウザでサーバーに接続してみる。&br; 接続先URL:http://192.168.1.2:8080/server-status (IPアドレスはサーバーのローカルIP)&br; ブラウザにApache Statusが表示されれば、サーバーは正常に稼働している。&br; 停止させる場合は #service phttpd stop phttpdを停止中: [OK] *自動起動設定 [#j50b563c] init.dの中にphttpdを作ったので、自動起動にも対応可能となっている。必要に応じて自動起動の設定をしておく。 #chkconfig phttpd on *epgrecの配置 [#gdce28d8] apacheの設定が完了したので、この環境に沿ってepgrecを配置する。 phttpd.confに指定したとおりの場所にepgrecを配置させる。 #mkdir /var/www/phtml これまでepgrecを運用していた場合は、epgrecをフォルダごと移動させる。 #mv /var/www/html/epgrec /var/www/phtml/ epgrecフォルダの所有者を設定する。 #chown -r jack:jack /var/www/phtml/epgrec これからepgrecを構築する場合は、phtmlフォルダ配下にepgrec環境を構築させる。番組取得用cronの更新も忘れずに。&br;&br; これでapacheを異なる設定で複数起動させることができる。 ---- *コメント欄 [#k37f2665] #pcomment_nospam(,10,avobe)