2013/07/09

apache httpd.confの設定

★Apacheは、モジュールによって機能を追加する。組み込まれているモジュールは、以下のようにして確認できる
/usr/sbin/httpd -l
  core.c
  prefork.c ーープロセス
  http_core.c
  mod_so.c
 
Apache 2.0ではDSO(Dynamic Shared Object)を利用し、
実行時にモジュールを組み込む。
LoadModule php5_module modules/libphp5.so

★コンパイルオプション(稼働モードなど)を確認できる
/usr/sbin/httpd -V ←「-V」でコンパイルオプションを確認
Server version: Apache/2.0.54
Server built:   May 23 2005 08:12:24
Server's Module Magic Number: 20020903:9
Architecture:   32-bit
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork" ←preforkになっている
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP

★httpdの設定のみをチェックする
# /usr/sbin/httpd -t

★プロセス数関する設定
<IfModule prefork.c>
StartServers       8 立ち上げた際に最初に起動するプロセス数
MinSpareServers    5
MaxSpareServers   20 常時待機しているようにプロセス数
ServerLimit      256
MaxClients       256 上限プロセス数
MaxRequestsPerChild  4000 プロセスを定期的に再起動させる
     処理中、メモリーの申請と放棄繰り返し、メモリーの利用効率が悪くなる。
     一定回数に達すると、使い捨て。
</IfModule>
MaxClients=使用可能なメモリ量/Apacheの1プロセスが使用するメモリ量
難しい作業ね。1プロセスは、経験的には、静的コンテツの場合で数Mbytes、動的コンテンツで20?30Mbytes
値を少しずつ上げていき、vmstatやtopなどのコマンドでスワップへの書き込みが発生しない値にする
psコマンドでは、「VSZ 仮想」と「RSS物理」の値に注目
topコマンドの場合は、「VIRT仮想」と「RES物理」の値に注目

★Apache 2.0のデフォルト設定はプロセスベースの処理になっているため、
スレッドを使用する時、下記を修正する
/etc/sysconfig/httpd
  HTTPD=/usr/sbin/httpd.worker ←httpdかhttpd.workerを指定
スレッドの設定
<IfModule worker.c>
ServerLimit   プロセス
StartServers         2  プロセス
MaxClients         150  thread
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25 1つのプロセスで生成されるスレッド数
MaxRequestsPerChild  0
</IfModule>
MaxClients数=ThreadsPerChild数×プロセス数

★セキュリティ設定
・OS情報
ServerTokens ProductOnly
ServerSignature Off

<Directory />
(省略)
AllowOverride None ←.htaccessによる制限上書きを禁止
</Directory>