/etc/apache/httpd.confの編集

Apacheの設定を調節します

難易度 簡単?、奥が深い!
効果 あり、自分の環境にあわせる
vine OK!
apacheの設定は各環境によって様々です。また、apacheには様々な機能があります。
基本的なことを記載していますがとても十分とは言えません。

apacheの高速化にはアクセス数、メモリー、動的なページを使用するかなどの環境にあったcliant数を設定する、余分な機能をそぎ落とす、できるだけファイルアクセスをしないようにする、.htaccessを用いない、logをつけない、思いきってsquidをキャッシュとして使用する等があるようです。

 

これまでapacheをユーザーhttpdで動かしていましたので変更します。やはりnobodyでは動かさない方がよいようです。

$ groupadd httpd

$ useradd -g httpd -d /dev/null -s /bin/false httpd

/etc/apache/httpd.confを変更します。ただしapacheの実行ユーザーをディストリビューションの初期設定から変更するとcgiが動かなくなります。この場合はsuexecを別名に変更します。本当はリコンパイルした方が良いそうです。


ルートディレクトリーの変更
ヴァーチャルホストを設定するならhttpd.confの前半での設定は無視されます。
ftpでホームページでアップロードするなら/home/httpd/hogehogeをルートディレクトリーにするのが簡単です。


不必要なモジュールの削除
apacheのプロセスを少しスリム化できます。その分最大プロセス数を増加できれば性能アップできます。私の場合以下のものを使用しないようにしました。
使用する環境によっていろいろですので各自調べてみてください。

##LoadModule mime_magic_module /usr/lib/apache/1.3/mod_mime_magic.so
##LoadModule status_module /usr/lib/apache/1.3/mod_status.so
##LoadModule cgi_module /usr/lib/apache/1.3/mod_cgi.so
##LoadModule expires_module /usr/lib/apache/1.3/mod_expires.so


圧縮モジュールの追加、mod_gzipのインストール
回線が細く、CPUパワーに余裕がある場合にはウェブページを圧縮して送信することにより見かけ上の転送速度を上げて、レスポンスを良くすることが出来ます。回線が太い場合、CPUパワーに余裕が無い場合は効果は無いようです。

$ apt-get install libapache-mod-gzip

これでは毎回圧縮して送信します。静的なページだと圧縮済みを送る方法より効率がよくなります。そのための方法ががある思いますが調べてもよくわかりませんでした。もし御存じの方がいらっしゃいましたら教えて下さい。

httpd.confを修正、たぶんこれで良いと思います

LoadModule gzip_module /usr/lib/apache/1.3/mod_gzip.so
mod_gzip_on Yes
mod_gzip_item_include file \.html$
mod_gzip_item_include file \.jsp$
mod_gzip_item_include file \.php$
mod_gzip_item_include file \.cgi$
mod_gzip_item_include file \.txt$
mod_gzip_item_include file \.shtml$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-httpd-php
mod_gzip_item_include mime ^httpd/unix-directory$
mod_gzip_item_include handler ^perl-script$
mod_gzip_item_include handler ^server-status$
mod_gzip_item_include handler ^server-info$
mod_gzip_item_exclude file \.css$
mod_gzip_item_exclude file \.js$
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_include file \.htm$
mod_gzip_item_include mime text/.*
mod_gzip_dechunk yes
mod_gzip_temp_dir /var/mod_gzip
mod_gzip_keep_workfiles No
mod_gzip_can_negotiate Yes
mod_gzip_minimum_file_size 512
mod_gzip_maximum_file_size 0
mod_gzip_maximum_inmem_size 204800
mod_gzip_min_http 1001

それぞれの項目ついての最適な価はよくわかりません。
minimum size, inmem sizeは設定によってパフォーマンスが大きく変わると思います。
ワークディレクトリーをRAM DISKにすることでさらにパフォーマンスアップできるようです。ホームページのサイズを考えるとRAM DISKのサイズはそれほど大きくなくてもいいようです。


server-infoのコメントアウト
apacheの状態をリモートで観察することができるそうですが、これをコメントアウトします。
設定を最適化する間ではonでもいいのかもしれません。

#ExtendedStatus Off


.htaccessを使用できないようにする
.htaccessを使用できるようにしておくとアクセスがあるたびに.htaccess の有無を親ディレクトリをさかのぼって調べるためにアクセスが遅くなるそうです。
例えば ~hogehoge/hoge1/hoge2.htmlを送信する場合、~hogehoge/hoge1/.htaccess, ~hogehoge/.htaccessが存在しないか2つを調べてから送信しますので時間のロスが生じてしまいます。
#を挿入しコメントアウトしました。

#AccessFileName .htaccess

これでは本当は不完全なはずですが、今度追加します。


.inc .sqlファイルを見れないように変更
これはPHPで使用するデータベースの設定ファイルなので見られたくありません。
基本的にはこういうファイルはapacheのルートディレクトリ以下に配置するべきではありません…。

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

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


debianでは/doc/がアクセス制限されているので解除します


DefaultCharacterをnoに変更
debianの初期設定のままだとブラウザで表示する際に日本語が文字化けするようです

AddDefaultCharset no


特定のディレクトリのアクセス制限
.htaccessを使用せずに特定のディレクトリのアクセス制限を行う場合はhttpd.confに直接記述します。/home/hogehoge/higehigeへのアクセスにIDとパスワードを求める場合

<Directory "/home/hogehoge/higehige/">

AuthUserFile /home/hogehoge/hogepasswd/.passwd

AuthGroupFile /dev/null

AuthName "Please Enter Your Password"

AuthType Basic

<limit GET>

require valid-user

</limit>

</Directory>

とhrrpd.confに記載し次にコンソールからIDとパスワードを登録します。

.passwdにパスワードファイルを作成し、ID higehigeを登録する場合

$ htpasswd -c /home/hogehoge/hogepasswd/.passwd higehige
$ /usr/sbin/apachectl configtest
$ /usr/sbin/apachectl graceful

としてユーザーhigehigeを登録しパスワードを設定し、最後に でapacheを再スタートすれば設定完了


Virtual hostの設定
一つのサーバーでネームベースの複数のバーチャルサーバーを動かします。
このドメインではkids-clinic.jp, www.kids-clinic.jp, linux.kids-clinic.jpを運用しています。他にwww.childrens-hospital.jpを運用したいのですがDNSサーバーの設定がうまくできていません。

最初の設定がdefaultの設定となります。一致するバーチャルサーバーが無かった場合はこの最初の設定が適応されます。

NameVirtualHost 192.168.0.3

<VirtualHost 192.168.0.3>
ServerAdmin webmaster@kids-clinic.jp
DocumentRoot /home/httpd/www
ServerName www.kids-clinic.jp
ErrorLog /var/log/apache/kids-error.log
CustomLog /var/log/apache/kids-access.log common
</VirtualHost>

<VirtualHost 192.168.0.3>
ServerAdmin webmaster@kids-clinic.jp
DocumentRoot /home/httpd/test
ServerName k6.local
ErrorLog /var/log/apache/local-error.log
CustomLog /var/log/apache/local-access.log common
</VirtualHost>

<VirtualHost 192.168.0.3>
ServerAdmin webmaster@childrens-hospital.jp
DocumentRoot /home/httpd/child
ServerName www.childrens-hospital.jp
ErrorLog /var/log/apache/children-error.log
CustomLog /var/log/apache/children-access.log common
</VirtualHost>


戻る
コメント・訂正がありましたらc-yun@kids-clinic.jpまで