teematsu @ ウィキ

Apache

最終更新:

teematsu

- view
管理者のみ編集可

バーチャルホスト追加

/etc/apache2/site-available/fooを追加

a2ensite foo

モジュールの有効化

a2enmod module_name

組み込まれているモジュール一覧

sudo apache2ctl -M

ログファイルの所有者、パーミッション

Apache自体が作成するログファイルは、root/root, 644 になっているっぽい。 logrotate時に新規作成されるファイルは、/etc/logrotate.d/apache2で指定する。

デフォルトでは次のとおり。

create 640 root www-data

SetHandler/AddHandler

  • SetHandler ディレクティブ
    マッチするファイルがハンドラで処理されるようにする
    拡張子によらず、すべてそのハンドラで処理
  • AddHandler ディレクティブ
    ファイル名の拡張子を指定されたハンドラにマップする
    マップの追加

.htaccess

.htaccessはサブディレクトリにも適用される。 → http://httpd.apache.org/docs/2.2/ja/howto/htaccess.html

ファイル名を指定してアクセスを禁止

指定したファイル名と、アクセス対象ファイルのbasenameがマッチすると適用される。basenameなので パス名は比較対象に入らない。

ファイル名パターン

 <Files *.bak>
   Order allow,deny
   Deny from all
 </Files>  

.htaccessはサブディレクトリにも適用されるので、foo.bakもbar/baz.bakにもこの設定が適用される。

正規表現

 <Files ~ "^\.ht">
   Order allow,deny
   Deny from all
 </Files>

マシンメモリが枯渇する現象

  • Apacheの子サーバープロセスが何度もリクエストを処理する過程で、使用メモリが少しずつ増えていく
    • 初期
        PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
      21428 www-data  20   0  255m  49m 4324 R 76.7  4.9   0:26.54 apache2
      
    • 問題発生時
        PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
       2948 www-data  20   0  429m 110m   40 D  4.0 11.0   3:07.57 apache2
      
  • 利用可能メモリだだんだん減っていく。物理メモリが減り、スワップも減り、buffersで使っているメモリも減ったところで、突然処理が進まなくなる。
     Mem:   1029424k total,  1020476k used,     8948k free,      116k buffers
     Swap:   915664k total,   915664k used,        0k free,    15144k cached
    
  • 定期的にcronで処理を動かすことで、phpやpostgresのプロセスが作成されるが、これらは動作できないまま溜まる
top - 15:25:54 up 39 min,  3 users,  load average: 7.35, 4.31, 2.52
Tasks:  94 total,   1 running,  93 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.3%us, 43.8%sy,  0.0%ni,  0.0%id, 55.8%wa,  0.1%hi,  0.1%si,  0.0%st
Mem:   1029424k total,  1020476k used,     8948k free,      116k buffers
Swap:   915664k total,   915664k used,        0k free,    15144k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
22617 tmatsu    20   0  165m  17m   40 D  5.1  1.7   0:02.00 php
 2948 www-data  20   0  429m 110m   40 D  4.0 11.0   3:07.57 apache2
22632 postgres  20   0 99516  304   96 D  4.0  0.0   0:00.70 postgres
22616 www-data  20   0  161m  13m   44 D  3.7  1.4   0:01.58 php
22630 postgres  20   0 98.1m 1272  104 D  3.7  0.1   0:01.16 postgres
 2627 ntp       20   0 22384  144   16 D  3.5  0.0   0:02.58 ntpd
22627 postgres  20   0 98.1m 1352  136 D  3.4  0.1   0:01.28 postgres
 2707 root      20   0  215m  400   12 S  3.2  0.0   0:02.38 apache2
  221 root      15  -5     0    0    0 D  3.1  0.0   0:05.52 kswapd0
22618 tmatsu    20   0  164m  16m   44 D  3.1  1.6   0:01.08 php
 2611 root      20   0  116m 7768   72 S  2.9  0.8   0:07.60 ruby
 2756 tmatsu    20   0 80092  320   36 D  2.6  0.0   0:00.40 smbd
 2869 tmatsu    20   0 18828  400  192 R  2.3  0.0   0:04.52 top
 2464 postgres  20   0 99768  508  108 D  2.0  0.0   0:02.78 postgres
22629 postgres  20   0 98.0m 1072   64 S  1.5  0.1   0:00.82 postgres
 2559 root      20   0 55536  272  116 D  1.1  0.0   0:02.30 nmbd
22623 postgres  20   0 98.5m 1496   96 D  1.1  0.1   0:00.54 postgres
 2465 postgres  20   0 70060  360   40 S  0.9  0.0   0:03.48 postgres
 2836 tmatsu    20   0 65932  108    4 S  0.9  0.0   0:00.96 sshd
 1035 root      15  -5     0    0    0 S  0.6  0.0   0:00.64 kjournald
22612 root      20   0 29324  220   32 S  0.6  0.0   0:00.08 cron
 2847 tmatsu    20   0 66064  124    4 S  0.5  0.0   0:01.44 sshd
 1920 root      20   0 50552  252   80 D  0.3  0.0   0:01.52 vmware-guestd
    1 root      20   0 10316   32   12 S  0.2  0.0   0:01.96 init
 2870 tmatsu    20   0 25632   36    8 S  0.2  0.0   0:00.30 screen
    2 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/0
    4 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0 
  • kernel がプロセスをkillするが、killの対象が多くの場合postgresやphpであり、メモリを消費しているapacheがkill対象になることがほとんどない。
Jul 20 14:00:20 ------------- kernel: [760857.389578] Out of memory: kill process 17421 (p
ostgres) score 85809 or a child
Jul 20 14:00:20 ------------- kernel: [760857.389755] Killed process 31582 (postgres)
  • 溜まったプロセスの実行は進まない。

対策として、次の処置を実施する。

  • MaxRequestsPerChild を設定する。
    子サーバープロセスがリクエストを処理する上限の回数。デフォルトでは、0(制限なし)。0以外を指定すれば、その回数リクエストを処理した後にプロセスが破棄されるため、メモリ使用量が段々増大する場合でもメモリを食い尽くすことを防げる。
  • MaxKeepAliveRequests を小さ目の値にする。
    KeepAlive On にしている場合は、MaxRequestsPerChild はリクエスト数上限としてでなく、コネクション数上限として機能する。つまり、クライアントがコネクションを貼りっぱなしでリクエストを多数送信してくる場合、MaxRequestsPerChild が1でもそれらリクエストすべて完了するまで子サーバープロセスは生き続ける。コネクション貼りっぱなしのクライアントが子サーバープロセスを延命させてメモリを圧迫する場合には、MaxKeepAliveRequests(コネクションあたりのリクエスト数の上限) を小さ目に設定して、延命を防ぐ必要がある。

mod_rewrite

  • RewriteCond の行を並べて書いた場合はANDになる。ORにするには、RewriteCond の行の最後に[OR]をつける。mod_rewrite
  • RewriteCondの適用対象のRewriteRuleは、RewriteCondの直後の1行のみのようだ。RewriteRuleを2行以上ならべて、それら全体にRewriteRuleを適用することはできない?
  • 「正規表現にマッチした場合は書き換えない」場合は、置き換え後の文字列に - を指定。
    RewriteRule ^api/.*$ - [L]
    

証明書関係

CSR: 証明書発行時に登録する、自身の情報

内容確認方法

openssl req -text -in foobar.csr

名前:
コメント:
人気記事ランキング
目安箱バナー