WWWサーバの構築(SuSE編)


WWW サーバは、SuSE 標準の Apache を使用しました。おやじが気が付いたことを以下に示します。
  1. SuSE 標準の Apache は2.0系で、2004.05現在で Apache 2.0.48 になっており比較的新しい。

  2. 下記のようにデフォルトで suEXEC 対応になっているので、CGIの設置には少し注意が必要である。

    ・AP_DOC_ROOT="/srv/www/htdocs"
    ・HTTPD_USER="wwwrun"
    ・LOG_EXEC="/var/log/apache2/suexec.log"
    ・SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
    ・USERDIR_SUFFIX="public_html"
    ・GID_MIN=96
    ・UID_MIN=96

  3. PHP はデフォルトで使用でき、mbstring 付きでコンパイルされているので日本語も問題ない。DAV等は、YaST で必要なモジュールを組み込めば使用できる。

  4. https はデフォルトで動作するかと思ったが、conf ファイルの設定だけでは駄目で YaST から起動スクリプトの設定をする必要がある。(おやじは、かなりはまった。)

  5. 設定は用途毎に分割されて多数の conf ファイルを、基本となる httpd.conf から include する形になっており、いろいろ追加設定するおやじとしては全体の設定が非常に見えにくかった。一旦、 include している conf ファイルを全て httpd.conf にコピーし全体を把握してから変更したほどである。

  6. 基本的に YaST が管理している /etc/apache2/conf.d ディレクトリ内の conf ファイルは、手動で変更できないので注意が必要である。仮に変更しても Apache やシステムを再起動すると、YaST で設定した /etc/sysconfig/apach2 の内容に従い上書きされてしまうので無駄である。

■Apache のインストール

Apache のインストールが済んでいない場合は、YaST を起動してインストールしてください。

  1. YaST コントロールセンタを起動し、「ソフトウェア」の「ソフトウェアのインストール/削除」を起動する。

  2. 「フィルタ」 を 「選択グループ」 とし下の欄の 「Apache2 を使用する単純な WWW サーバー」 にチェックマークを入れて 「了解」 を押しておしまい。

■Apache の設定

インストールが済んだら、Apache の設定をしていきます。本ページでは、基本となる設定 ( CGI 、Userdir 、PHP 等)のみ示し、SSL 化 ( https ) 、DAV 、バーチャルホストについては各ページ参照ください。
前述したように、 SuSE では下記のように設定ファイルが分かれており、httpd.conf から各 conf ファイルを include する形態になっているため全体像が分かりにくく、気をつけないと二重定義になったりしますので、注意が必要です。
# Overview of include files, chronologically:
#
# httpd.conf
#  |
#  |-- uid.conf  . . . . . . . . . . . . . .  UserID/GroupID to run under
#  |-- server-tuning.conf  . . . . . . . . .  sizing of the server (how many processes to start, ...)
#  |-- sysconfig.d/loadmodule.conf . . . . .  [*] load these modules
#  |-- listen.conf . . . . . . . . . . . . .  IP adresses / ports to listen on
#  |-- mod_log_config.conf . . . . . . . . .  define logging formats
#  |-- sysconfig.d/global.conf . . . . . . .  [*] server-wide general settings
#  |-- mod_status.conf . . . . . . . . . . .  restrict access to mod_status (server monitoring)
#  |-- mod_info.conf . . . . . . . . . . . .  restrict access to mod_info
#  |-- mod_autoindex-defaults.conf . . . . .  defaults for displaying of server-generated directory listings
#  |-- mod_mime-defaults.conf  . . . . . . .  defaults for mod_mime configuration
#  |-- errors.conf . . . . . . . . . . . . .  customize error responses
#  |-- ssl-global.conf . . . . . . . . . . .  SSL conf that applies to default server _and all_ virtual hosts
#  |
#  |-- default-server.conf . . . . . . . . .  set up the default server that replies to non-virtual-host requests
#  |    |--mod_userdir.conf  . . . . . . . .  enable UserDir (if mod_userdir is loaded)
#  |    `--conf.d/apache2-manual?conf  . . .  add the docs ('?' = if installed)
#  |
#  |-- sysconfig.d/include.conf  . . . . . .  [*] your include files
#  |                                             (for each file to be included here, put its name
#  |                                              into APACHE_INCLUDE_* in /etc/sysconfig/apache2)
#  |
#  `-- vhosts.d/ . . . . . . . . . . . . . .  for each virtual host, place one file here
#       `-- *.conf . . . . . . . . . . . . .     (*.conf is automatically included)

◆ 基本的な設定

まずは YaST を使って基本的な設定を行います。

  1. YaST コントロールセンタを起動し、「システム」の「/etc/sysconfig エディター」を起動する。

  2. 「設定のオプション」 で 「Network」 -> 「WWW」 -> 「Apache2」 と開き、必要なパラメータをクリックして選択して「設定」欄で設定し、最後に 「完了」 ボタンを押す。

    パラメータ 設 定 概 要 設定値
    APACHE_HTTPD_CONF マスタ設定ファイルを hddpd.conf 以外にする場合の指定。  
    APACHE_MPM Apache2 から採用された MPM の設定。prefork、worker、leader、metuxmpmが指定できるが、デフォルトは空欄で prefork となる。Apache1.3系との互換性を重視した非マルチスレッドの MPM で、Apache2系で confugure 時に未指定ならこのモードになる。一般的に、 prefork で問題になることはないはず。  
    APACHE_SERVERADMIN デフォルトサーバ(バーチャルホストは非関与)の管理者のメールアドレスを指定。 webmaster@mail.aconus.com
    APACHE_SERVERNAME デフォルトサーバのサーバ名を指定。DNSで牽ける名前を設定すること。 www.aconus.com
    APACHE_CONF_INCLUDE_FILES ユーザ定義の include したいファイル名を指定。  
    APACHE_CONF_INCLUDE_DIRS ユーザ定義の include したい複数ファイルがあるディレクトリ名を指定。 /etc/apache2/my_conf 
    APACHE_MODULES ロードする module を指定。必要に応じて追加、削除する。 dav dav_fs rewrite
    APACHE_SERVER_FLAGS

    サーバ起動時のフラグを指定。SSL使用時は、「-D SSL」と指定する事を忘れずに。おやじはハマッタ。

    -D SSL
    APACHE_DOCUMENT_ROOT ドキュメントルートを指定。空欄ならデフォルトの /srv/www/htdocs となる。SuEXEC されている事等を考慮して必要なら変更する。  
    APACHE_START_TIMEOUT スタートアップスクリプトでサーバが正常に立ち上がったかを監視する時間を指定。SSL証明書でパスフレーズを入力するような場合は、この値(デフォルト2秒)を大きくすること。  
    APACHE_SERVERSIGNATURE Apache が生成するドキュメントのフッタを設定。ServerSignature ディレクティブに反映される。デフォルトは「on」なので、サーバのバージョン、 稼動中のホストの ServerName の書かれた行を追加し、「email」にした場合はさらに参照されたドキュメントに対する ServerAdmin を指す "mailto:" が追加される。何も出したくなければ、「off」に設定。  
    APACHE_LOGLEVEL ログレベルの設定。通常はデフォルトの warn で問題ないが、テスト中などは変更しても良い。  
    APACHE_ACCESS_LOG アクセスログのフォーマットを指定。デフォルトではリファラーを採る conbined になっている。おやじは、CustomLog でいろいろ設定するので削除した。 削除
    APACHE_USE_CANONICAL_NAME Apache が自分自身の名前とポートを決定する方法を設定。UseCanonicalName ディレクティブに反映される。デフォルトの off で問題になることはない(クライアントの指定のまま)はず。詳しくは、Apache のドキュメント参照のこと。  
    APACHE_SERVERTOKENS HTTP 応答ヘッダの内容を指定。ServerTokens ディレクティブに反映される。デフォルトは os なので、Apache/2.0.48 (Unix) レベルまで応答する。詳しくは、Apache のドキュメント参照のこと。  
    APACHE_EXTENDED_STATUS mod_status 使用時に拡張情報(CPU使用率等)を取得する場合、「on」とする。ExtendedStatus ディレクティブに反映される。詳しくは、Apache のドキュメント参照のこと。  
    APACHE_BUFFERED_LOGS 意味不明。  
    APACHE_TIMEOUT 各イベントについて、リクエストを失敗させるまでに Apache が待つ時間を設定。Timeout ディレクティブに反映される。デフォルトの300秒のままとする。詳しくは、Apache のドキュメント参照のこと。  

  3. 設定が完了したら、Apache を再起動する。このとき実際に、conf ファイル /etc/sysconfig/apache2 の内容を元に反映される。

    # /etc/init.d/apache2 restart

    一応、/etc/apache2/sysconfig.d ディレクトリ配下の conf ファイルの内容を確認しておく。

◆ httpd.conf の設定

SuSE では用途毎に conf ファイルが分かれているので、実際に見てみれば分かるとおり httpd.conf で設定する項目はほとんどありません。
設定が必要なのは DirectoryIndex ディレクティブの設定で、クライアントがディレクトリアクセスしてきたときに補完するファイル名の指定ぐらいです。例えば、http://www.aconus.com/~oyaji/ とアクセスしてきたときに、表示させたいファイル名を指定しますが、おやじは基本的に拡張子を .htm にしているので、それを追加するとともに、Squirrelmail 用に .phpも追加しました。PHP関係は、Squirrelmail を動作させるぐらいならこの設定ぐらいで、他には何も設定はいりません。(赤字:追加)
なお、ルートディレクトリに関する設定があるので、ルートディレクトリ配下で認証を行いたい場合などは、こちらで変更することになります。
以下、各 conf ファイルで機能毎の設定をしていきます。基本的に、httpd.conf で Include されている順番で記載します。なお、以下のファイルは基本的な動作では変更不要なため、ここでは扱いません。各機能毎のページで記載します。
なお、mod_status と mod_info がデフォルトで有効になっています。localhost からしかアクセスはできないようになっていますが、設定を誤ると外部からも見ることができるようになってしまいます。是非必要と思われる方以外は、これらの conf ファイル (mod_status.conf、mod_info.conf) を Include している行をコメントアウトすることを薦めます。

No.

conf 名

概  要

1

sysconfig.d/*.conf sysconfig.d ディレクトリ配下にある global.conf、incude.conf、loadmodule.conf は YaST で扱うので触手厳禁。

2

ssl-global.conf SSL関連なので基本動作に関係なし。SSL化しても通常は変更不要。

3

mod_log_config.conf ログの基本フォーマットを定義したファイルで通常は変更不要。

4

mod_status.conf Apache の動作状態を表示するためのファイルで変更は不要。必要ないなら、httpd.conf の include 行をコメントアウトする。

5

mod_info.conf Apache のさまざまな情報を表示するためのファイルで変更は不要。必要ないなら、httpd.conf の include 行をコメントアウトする。

6

mod_autoindex-defaults.conf 自動インデックス生成に関する設定で通常は変更不要。

7

errors.conf エラーメッセージに関する設定で通常は変更不要。カストマイズする方はこちらで。

◆ uid.conf の設定

Apache がデフォルトサーバで実行されるときの、ユーザ/グループ ( wwwrun/www ) が指定されているだけです。SuSE では Apache は SuEXEC 環境で動作しますので、デフォルトサーバで CGI を使用する場合は変更すると CGI が動作しませんので、基本的に変更不可です。どうしても変更したければ、下記で Apache を SuEXEC で動作しないように変更する必要がありますが、セキュリティ上はあまりお薦めはしません。ただ、この方法は CGI がうまく動作しないときに、一時的に SuEXEC の影響かどうかを判断する場合にも有効です。
SuEXEC を解除するには、YaST の 「/etc/sysconfig エディター」 で APACHE_MODULES 内の 「suexec」 を消して登録しなおすだけです。これで、通常モードで起動するので、こちらで CGI を含めた動作確認をしてから suEXEC 化されると良いでしょう。

◆ server-tuning.conf の設定

ここでは、Apache の MPM と KeepAlive に関する設定を行いますが、通常は変更は不要です。おやじはホストネームでのログ収集を行っているので、ここに追加しました。
この機能を使うと、DNSの逆牽きで負荷が重くなるとともに応答が遅くなるが、アクセスがまだまだ少ないのとホストネームのほうが常連さんならすぐにわかるため、あえて使用しています。ただ、逆牽き設定をしていないDNSや設定が誤っているDNSが多くエラーログがかなり出てしまいます。(BINDの設定でログらないようにしています。)

HostnameLookups On


◆ listen.conf の設定

ここでは、Apache 待ち受けるポート(IP)を指定しますが、通常はデフォルトのままで問題はありません。SSL を使用しない場合でも特に変更は必要ありませんが、443番で起動しないように下記部分をコメントアウトしておくと良いでしょう。(赤字:追加)

#<IfDefine SSL>
#    <IfDefine !NOSSL>
# <IfModule mod_ssl.c>

#     Listen 443

# </IfModule>
#    </IfDefine>
#</IfDefine>

なお、名前ベースのバーチャルホストの指定もここに書くようなコメントがありますが、おやじは、vhosts.d ディレクトリ配下にバーチャルホスト関係の設定は集めたほうが良いと思います。

◆ mod_mime-defaults.conf の設定

ここでは、mod_mime (リクエストされたファイルの拡張子とファイルの振る舞い (ハンドラとフィルタ)、内容 (MIME タイプ、言語、文字セット、エンコーディング) とを関連付ける) に関する設定を行います。おやじが、変更したのは下記の3個所です。

◆ default-server.conf の設定

ここで Apache のデフォルトサーバの設定を行います。おやじは、IP ベースのバーチャルホストで動かしていますので、コメントアウトする項目が多いですが、基本的な設定はここで行います。下記以外は、基本的には変更は不要のはずです。Userdir を使用しないなら、関連のところをコメントアウトしてください。なお、Userdir の詳細設定は、mod_userdir.conf で行います。

◆ mod_userdir.conf の設定

ここで Userdir に関する設定を行いますが、SuSE では基本的な設定が済んでいるので、ほとんど変更は不要です。おやじが行ったのは、ユーザディレクトリ配下でのCGIの実行権付与とインデックスリストの非表示だけです。


◆ その他の設定

以上で主要な設定は終了ですが、基本的な設定でも示したとおりおやじは管理面からログをカストマイズしているのと、rewite を使ったアクセス制御を行っていますので、これらの設定を追加しました。
これらの追加には、YaST で設定する APACHE_CONF_INCLUDE_DIRS を使って行いました。具体的には、/etc/apache2/my_conf というディレクトリを作成し、この配下に追加する conf ファイルを作成することにより Include させました。作成したのは、ログ用の custom_log.conf と Rewite 用の rewrite.conf です。

■logrotateの設定

おやじの場合、上記のようにログをカストマイズしているので、そのままではデフォルトのログ以外はログローテーションされません。そこで、/etc/logrotate.d 配下にある apache2 を参考に追加したログがローテーションされるようにします。なお、おやじは最終的には Webalizer での表示用に自分でローテーションするようにしますので、下記設定は削除(logrotate.d からの apache の削除)してあります。
SuSE のログローテーションは、RedHat とはかなり異なった形で行われています。管理の方法や考え方の違いと思いますが、おやじとしては RedHat のほうが合っている気がしますので、こちらの例もあげておきますので、自分にあった方を採用すればいいでしょう。

  1. SuSE形式

    SuSE の形式は、下記のようにログ毎にローテーション条件が書かれており、ローテションの方法は以下のようになっており、1週間に1回実行されるので、同様に新しく作成したログについても追記していけば良い。

    /var/log/apache2/access_log {
       compress             #ローテション後のファイルを gzip で圧縮。
       dateext              #ローテション後のファイルにYYYYMMDDと付与。
       maxage 365           #ローテション後のファイルを残す日数。
       rotate 99            #ログファイルのローテーション回数。
       size=+4096k          #ログファイルが指定サイズを超過したらローテーションを開始。 
       notifempty           #ログファイルが空ならローテーション未実施。
       missingok            #ログファイルが無くても処理を正常終了。
       create 644 root root #新ログファイルをパーミッション(644)、所有者(root)、グループ(root)で生成。
       postrotate           #このコマンドとendscriptの間にログファイルのローテーション後に実行するコマンドを記述。
         /etc/init.d/apache2 reload #Apache をリロード。
       endscript            #postrotate の終わり。
    }

  2. RedHat形式(もどき)

    基本は、/etc/logrotate.conf で指定されており、1週間に1回、非圧縮で4週間分のデータを残すことになっているので、これをベースにRedHat風にしたもの。もっと残したければ、上記のように rotate で指定すればよい。

    /var/log/apache2/*log {
       notifempty           #ログファイルが空ならローテーション未実施。
       missingok            #ログファイルが無くても処理を正常終了。
       create 644 root root #新ログファイルをパーミッション(644)、所有者(root)、グループ(root)で生成。
       sharedscripts        #1行目で複数指定されたlogファイルに対し、postrotate以降設定されたコマンドを実行。
       postrotate           #このコマンドとendscriptの間にログファイルのローテーション後に実行するコマンドを記述。
         /etc/init.d/apache2 reload #Apache をリロード。
       endscript            #postrotate の終わり。
    }


Top Pageへ