|
7.HTTPサーバー Apache |
2007年3月3日 |
HTTPサーバー(ホームページサーバー)Apacheの設定を行います。 |
サーバープログラムはApache、現在入っているバージョンはApache2.2.3です。
まずは一般的なホームページサーバーとしての設定を行い、それにプログラム言語のphpモジュールを付加、さらにデータサーバーとしてMySQLをインストールして接続します。
実は私の場合ホームページを作るのにホームページビルダーなどのホームページソフトは使用していません。php言語で書いたプログラムによってホームページ作成時はパソコンからデータを受け取りデータサーバーに保存。表示時はやはり同じphpプログラムによってデータサーバーからデータを取り出しhttpサーバーから送り出します。要は掲示板やブログと同じです。
そのためページ全体のレイアウトはある程度定型的となりますが、簡単に(掲示板に書き込む感覚で)ホームページを作ることができます。
ではさっそく設定に入ります。
Apache関連の主要な設定ファイルは
/etc/apache2/conf/httpd.conf(または/etc/apache2/conf/apache2.conf) です。
http://httpd.apache.org/docs/2.0/ja/ を参考にしながらこのファイルをテキストエディタで開いて設定に入ります。
以下には基本的に設定を(Vineのディフォルト設定から)変更した部分についてのみ記述しています。
サーバーの基本設定
... 多少パフォーマンスを上げるためKeepAliveを有効にします。Offでも問題はありません。
HostnameLookups On
... ログにIPアドレスのほかに接続名を記録するためOnにします。
ディフォルトがなぜかOffです。
LogFormatを少し改造します。
LogFormat "%t %a %h %l %u \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%t %a %h %l %u \"%!414r\" %>s %b" common
LogFormat "%t %a %h %l \"%{Referer}i\" -> \"%!414r\"" simple
... 日時を頭にして見やすくします。(%t)
... ipアドレスの記録を追加します。(%a)
... アタックの長たらしいログSEARCH...が記録されないようにします。(Error 414)
さらにログを見やすくするため不要な記録をさせないようにするための設定
SetEnvIf Remote_Addr 192.168. local_zone nolog
SetEnvIfNoCase Request_URI "\.(gif|jpg|png)$" images nolog
SetEnvIfNoCase Request_URI "null\.ida" attack nolog
SetEnvIfNoCase Request_URI "default\.ida" attack nolog
SetEnvIfNoCase Request_URI "root\.exe" attack nolog
SetEnvIfNoCase Request_URI "cmd\.exe" attack nolog
SetEnvIfNoCase Request_URI "Admin\.dll" attack nolog
SetEnvIfNoCase Request_URI "shell\.exe" attack nolog
エラー表示を日本語で表示するための設定
<IfModule mod_negotiation.c>
<IfModule mod_include.c> の中
<Directory "var/www/error">
....
LanguagePriority ja en es de fr ... jaを先頭に追加
....
</Directory>
ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
ErrorDocument 401 ....
.... (これらをすべて有効に)
</IfModule>
</IfModule>
言語の設定
LanguagePriority ja en ....
... ディフォルトの言語を日本語(ja)にし、優先順位を最優先にします。
AddDefaultCharser shift-jis
AddDefaultCharset EUC_JP
AddDefaultCharset none
... 文字セットの追加。phpを使う場合文字化け対策として書いたほうがよいという情報もありますが本当に必要かどうかはよくわかりません。
バーチャルホストの設定
... サーバーのホスト名を設定します。
または以下のように自分自身のIPアドレスを指定してもOK。
ServerName 127.0.0.1
DocumentRoot "/home/mysite/www"
... 表示サイト名を指定せずIPアドレスで直接接続してきた場合に案内ページを表示することにします。("/var/www/html"から変更。"/var/www/html"に案内ページをおいてもかまわないが。)
基本的なディレクトリオプションの設定。
<Directory />
Options None
AllowOverride None
Order Deny,Allow
Deny from All
</Directory>
まずは全てのアクセスを拒否しておき、個々のディレクトリごとに許可設定をします。
mysiteのディレクトリオプションの設定。
<Directory "/home/mysite/www">
Options FollowSymLinks
AllowOverride All
Order Deny,Allow
Allow from All
</Directory>
ひとつのサーバーで複数のサイトをホストするバーチャルホストの設定をします。
IPアドレスは一個のためサイトの名前で振り分ける"NameVirtualHost"を使います。
NameVirtualHost *:80
NameVirtualHost *:443
... SSLも試してみたいのでSSLポート(443)も指定しておきます。
ディフォルトで表示するサイトの設定です。
最初に書いた <VirtualHost *:80>がディフォルトとして表示されます。
<VirtualHost *:80>
ServerName mysite
DocumentRoot /home/mysite/www
ServerAdmin webmaster@iroribata.net
ErrorLog logs/error_log
CustomLog logs/access_log combined env=!attack
CustomLog logs/attack_log common env=attack
CustomLog /home/default.site/log/page_access_log simple env=!nolog
</VirtualHost>
ログは全体のアクセスログの他にサイト毎にも簡単なアクセスログを記録します。
さて以下に個々のサイトの設定をしますが、設定は別のファイルにまとめます。
Include conf/vhosts.conf (... サイトの設定ファイルを指定)
ファイルはServerRootで指定した"/etc/apache2"と合わせて
/etc/apache2/conf/vhosts.conf になります。
ここにサイト"kuragane.jp"を設定します。
ディレクトリオプションの設定とバーチャルホストの設定でセットになります。
さらに"http://kuragane.jp"でも"http://www.kuragane.jp"でもつながるようにするためバーチャルホスト名(ServerName)を両方設定します。
## kuragane.jp
<Directory /home/kuragane.jp/www>
AllowOverride All
Order allow,deny
Allow from all
</Directory>
<VirtualHost *:80>
ServerName kuragane.jp
DocumentRoot /home/kuragane.jp/www
ServerAdmin kiyoshi@kuragane.jp
ErrorLog logs/error_log
CustomLog logs/access_log combined env=!attack
CustomLog logs/attack_log common env=attack
CustomLog /home/kuragane.jp/log/page_access_log simple env=!nolog
</VirtualHost>
<VirtualHost *:80>
ServerName www.kuragane.jp
DocumentRoot /home/kuragane.jp/www
ServerAdmin kiyoshi@kuragane.jp
ErrorLog logs/error_log
CustomLog logs/access_log combined env=!attack
CustomLog logs/attack_log common env=attack
CustomLog /home/kuragane.jp/log/page_access_log simple env=!nolog
</VirtualHost>
あとはサイトごとにこの繰り返し。
テスト
# service apache2 restart
... 結果 [ 失敗 ] で起動しません。
エラーログ /etc/apache2/logs/error_log を見るとエラーログが開けないとか。
原因調査、原因判明。一部スペルミスでした。
ErrorLog logs/error_log とすべきところ、
ErrorLog log/error_log となっていました。
修正して [ OK ]
サイトのディレクトリ /home/default.site/www にファイル index.html をつくり
"This is Test !"とでも書いておいておきます。
/home/以下wwwまでのディレクトリはpublic readが設定されている必要があります。
ブラウザから "http://192.168.1.x"(サーバーのローカルアドレス)を打ち込んで "This is Test !"が表示され、いちおう基本設定はOKです。
でもまだホームページの表示はできません。
プログラム言語phpとデータサーバーMySQLを導入、そしてホームページプログラムIRORIBATAを稼動しなくてはなりません。
logrotate
各サイトに独自に作ったアクセスログについても同様にlogrotateされるようにしておきます。
/etc/logrotate.d/ に apache2-sitelog というファイル(名前は自由)をつくり、以下を記述しておきます。(実際には/etc/logrotate.d/apache2からコピーして修正)
/home/*/log/page_access_log {
missingok
notifempty
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/apache2.pid 2>/dev/null` 2> /dev/null || true
endscript
}
/etc/logrotate.d/apache2 に書き込むとapache2をアップグレードした際更新されて消されてしまうことがあります。