Apacheの場合、さまざまな機能を「モジュール」という形で用意しています。
モジュールを増やせばたくさんの機能を利用できますが、その反面メモリを大きく消費してしまうという問題があります。
CentOSのデフォルト状態では、ほぼ全てのモジュールが有効になっているため、必要以外のモジュールを除外する必要があります。例えば、一切モジュールを消さないデフォルトの状態だと、1プロセスあたり5MB程度のメモリを消費していることが分かります。
# ps aux|grep -v Ss|grep ‘[h]ttpd’|head -1
apache 22523 0.0 0.4 257548 5036 ? S 12:27 0:00 /usr/sbin/httpdこれを適切に設定しなおすと、4MB程度まで減らせます。
1プロセスあたり1MB省略できれば、200プロセスで200MB削減できることになりますし、実際にリクエストを受け付けているプロセスの場合はさらに消費メモリの差が出ることになります。# ps aux|grep -v Ss|grep ‘[h]ttpd’|head -1
apache 24715 0.0 0.4 161716 4228 ? S 19:46 0:00 /usr/sbin/httpdとはいえ、どのモジュールが必要なのかが分かりにくいので、モジュールの一覧と、私の勝手な重要度をまとめました。
重要度は、◎、○、△、+、の4種類で分類しており、一覧にある重要度のタイトルをクリックすると、フィルターすることも可能です。
◎=必須
○=あったほうが良い
△=必要ならあればよい
+=必要性なし
モジュール名 コメント mod_auth_basic △ ベーシック認証 mod_auth_digest + ダイジェスト認証 mod_authn_file △ 認証にテキストファイルを利用する
いわゆる.htpasswdを使う場合は必要mod_authn_alias + mod_authn_anon + 匿名ユーザを認証する mod_authn_dbm + 認証にDBMファイルを利用する mod_authn_default + mod_authz_host ◎ ホスト/IPアドレスでのアクセス制限
Orderや、Allow from ?? を使う場合は必須mod_authz_user △ ユーザ名でのアクセス制限 mod_authz_owner + ファイル所有者でのアクセス制限 mod_authz_groupfile + グループでのアクセス制限を行う(テキストファイル) mod_authz_dbm + グループでのアクセス制限を行う(DBMファイル) mod_authz_default + mod_ldap + LDAP用の基本モジュール mod_authnz_ldap + LDAPでのアクセス制限 mod_include △ SSIを提供
SSIを利用する場合は有効にするmod_log_config ◎ ログ保存
アクセスログをとるためには必須mod_logio + 送受信バイト数のログ保存(このモジュールがなければ保存できない) mod_env △ CGIやSSIでの環境変数を設定する
必要なければ無効でかまわないmod_ext_filter + データ返送時に外部プログラムを経由させる mod_mime_magic + ファイルの内容をベースにMIMEタイプ決定 mod_expires + Expireヘッダをセットする mod_deflate + データ返送時に圧縮する mod_headers △ リクエスト、レスポンスヘッダを制御する
必要なければ無効でかまわないmod_usertrack + クッキーでユーザ追跡を行う mod_setenvif ◎ 環境変数の制御を行う
無効でもかまわないが、標準の設定ファイルで利用されており、有効にするのが無難mod_mime ◎ 拡張子をベースにMIMEタイプを決定 mod_dav + WebDAVを提供 mod_status ○ /server-statusにてサーバ状態を表示する(URLは変更可能) mod_autoindex △ ディレクトリへのアクセス時にファイル一覧を作成する mod_info △ /server-infoにてサーバ設定を表示する(URLは変更可能) mod_dav_fs + WebDAVを提供 mod_vhost_alias + バーチャルホストを簡単に生成 mod_negotiation ◎ クライアントに適したファイルを自動判別する(.jaなど) mod_dir ◎ ディレクトリの取り扱いを行う(index.htmlの取り扱いなど) mod_actions + 特定の拡張子へのリクエストに応じてCGIを実行する mod_speling + 大文字小文字を同じように扱えるようにする mod_userdir △ ユーザのホームディレクトにアクセスできるようにする(チルダ形式など) mod_alias ◎ AliasやRedirectを利用できるようにする mod_rewrite △ Rewrite機能を提供する mod_proxy △ Proxyを提供する mod_proxy_balancer △ Proxy時に負荷分散機能を提供 mod_proxy_ftp + Proxy時にFTP接続機能を提供 mod_proxy_http △ Proxy時にHTTP接続機能を提供 mod_proxy_connect + Proxy時にCONNECT機能を提供 mod_cache + キャッシュを提供 mod_suexec △ suexecを提供 mod_disk_cache + cache_moduleにおいて、ディスクキャッシュを提供 mod_file_cache + 静的ファイルをメモリにキャッシュさせる mod_mem_cache + cache_moduleにおいて、メモリキャッシュを提供 mod_cgi △ CGIを提供 mod_version ○ クライアントへのレスポンスにApacheバージョンを挿入する
※注意点
以下のモジュールを無効にすると、標準の設定ファイル(/etc/httpd/conf/httpd.conf)のまま起動するとエラーとなります。
- mod_authz_hostを無効にした場合には、OrderやAllowなどの項目(例えば332行目など)をコメントアウトする必要があります
- mod_proxyを無効にした場合には、以下ようにコマンドを実行し拡張設定ファイルを無効化する必要があります
# mv /etc/httpd/conf.d/proxy_ajp.conf /etc/httpd/conf.d/proxy_ajp.conf.stop- mod_autoindexを無効にした場合には、IndexOptionsから始まる関連項目(例えば592行目?657行目)を全てコメントアウトする必要があります
vi /etc/httpd/conf/httpd.conf
もしくは以下のとおり、<IfModule>で括ってしまう方法もあります<IfModule mod_autoindex.c>
IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable
・・略・・
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
</IfModule>ちなみに、私はいつも以下のモジュールを有効にしています。
なお、mod_autoindex と mod_proxy を無効化していますので、前述のとおり設定を変更しなければエラーとなって起動しません。LoadModule authz_host_module modules/mod_authz_host.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule status_module modules/mod_status.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule alias_module modules/mod_alias.so
ウェブ開発者のための、1時間でできるLAMP環境構築術(CentOS編) - さくらインターネット創業日記
1年前 | 固定リンク | 2011年 5月 15日 | 
