倉金家ホームページ趣味の部屋/サーバー構築メモ
| ||||||
ホームページを外部に公開するためのHTTPサーバーの設定を行います。
サーバープログラムは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 On
... 多少パフォーマンスを上げるため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> | ||||||
言語の設定DefaultLanguage ja
LanguagePriority ja en .... ... ディフォルトの言語を日本語(ja)にし、優先順位を最優先にします。 AddDefaultCharser shift-jis AddDefaultCharset EUC_JP AddDefaultCharset none ... 文字セットの追加。phpを使う場合文字化け対策として書いたほうがよいという情報もありますが本当に必要かどうかはよくわかりません。 | ||||||
バーチャルホストの設定ServerName "jiji.iroribata.net"
... サーバーのホスト名を設定します。 または以下のように自分自身の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> あとはサイトごとにこの繰り返し。 | ||||||
テストhttpサーバー"apache"を起動してみます。
# 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を稼動しなくてはなりません。 | ||||||
logrotateapacheの標準ログは /etc/logrotate.d/apache2 の設定に従って自動的に1週間ごとに新規ファイルが作られ、古いファイルは 〜.1 〜.2 と名前が変えられ、やがて消滅します。
各サイトに独自に作ったアクセスログについても同様に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をアップグレードした際更新されて消されてしまうことがあります。 | ||||||