サーバ構築(4) Webサーバ(Apache)

Pocket

自宅サーバといえば、とりあえずはWebなわけで。OSインストール時に「Webサーバ」を選択しておくと、phpも一緒に入るので楽です。Apacheだけならインストール完了した時点でとりあえず動くし、そのまま使っちゃうというのも手ではありますが、それではあまりにも安直というか、芸がなさ過ぎるので、最低限は手を入れましょうと。

ソースコードをApache本家から取ってきて自分でインストールした場合、Apacheに関するファイルはデフォルトでは 1.3系なら /usr/local/apache、2.x系なら /usr/local/apache2 の配下にまとまります。設定ファイルは原則として conf/httpd.conf 一つです。非常に長いテキストファイルですが、大半はコメントで、英文ながら httpd.conf の非常に親切な説明になってますので、一度はじっくり読んでみるべきものと思います。

一方、Apacheをrpmでインストールした場合、設定ファイルは /etc/httpd/conf/httpd.conf ですが、その中にこの1行が含まれます。

Include conf.d/*.conf

rpmなApacheでは ServerRoot が /etc/httpd なので、結局 /etc/httpd/conf.d/ 配下に置かれている *.conf なファイルが全て httpd.conf の後に追加で読み込まれる仕組みです。ちなみに読み込み順はアルファベット順。もともと Apache の設定ファイルは httpd.conf、access.conf、srm.comf の三つに別れていたのものを httpd.conf に集約したはずなんですが、rpm 管理では Apache の関連パッケージを追加するたびに conf.d/ 配下に細切れの conf ファイルを置いていく方式をとってるわけですね。これ、三つどころじゃなく際限なく増えます。元の木阿弥どころじゃない。パッケージの管理方式としてはこの方が合理的なんでしょうが、この方式をきちんと理解していない奴が管理者になると悲惨です。以前、「Webが落っこちて再起不能になった」と泣きつかれたことがあります。原因はまさにこれで、 ssl.conf を更新しようとして、元のファイルを ssl_back.conf とリネームコピーしちゃった。その状態でApacheの再起動を実行してドボン。退避するならファイル名を ssl.conf.back 等にすべきでした。っつーか、商用サービスでそれをやるなよと小一時間(ry。。。

ついでにも一つ。rpm でインストールされた Apache の DocumentRoot は /var/www/html に設定されていますが、/var/www/html の下には何もファイルが置かれません。それでも Apache を起動してブラウザで眺めてみると、テスト画面らしきものが表示されます。知らないと DocumentRoot が空なのになんでテスト画面が出る?と不思議になりますが、これは conf.d/welcome.conf の記述によるものです。ここで指定されている noindex.html がどこにあるかは、httpd.conf の方を併せて読むとわかります。見通し悪いですよね。

<LocationMatch "^/+$">
    Options -Indexes
    ErrorDocument 403 /error/noindex.html
</LocationMatch>

さて、前置きが長くなりましたが、Linux 環境下ではこうやると便利ですよ、という一つの方法として私の設定を公開します。簡単に条件をまとめるとこんな感じです。

  • コンテンツ管理用に専用のUNIXアカウントを作成する。
  • コンテンツの管理(サーバへのアップロード)はFTPで行う。
  • せっかくの自宅サーバ俺様ドメインなので、なんぼでもサイト増殖可能にする。

これを実現するにはWeb(Apache)、FTP(VSFTPD)、DNS(BIND)の設定が必要となります。

まずは管理用ユーザの作成から。ユーザ名は何でもいいんですが、それらしくwwwmasterとでも。ホームディレクトリの下に html cgi-bin logs auth の各ディレクトリを掘り、コンテンツからログまで、全てここに集約します。デフォルトの /var/www は一切さわらずに放置。ちなみに、auth はベーシック認証を設定する際、.htpasswd を置く場所にしています。

# useradd -d /home/www -m -s /sbin/nologin wwwmaster
# passwd wwwmaster
# mkdir -p /home/www/html
# mkdir -p /home/www/auth
# mkdir -p /home/www/logs
# mkdir -p /home/www/cgi-bin
# chown -R wwwmaster:wwwmaster /home/www
# chmod 711 /home/www

最後の “chmod 711″がなにげに重要なポイントです。Linux は useradd でユーザを作成すると自動的にホームディレクトリをパーミッション 700 で作成するため、これをやっておかないと Web コンテンツを公開することができないのです。ディレクトリの設定が完了したら、Apache側の設定を行います。httpd.conf の末尾に、以下のようにネームベースバーチャルの記述を追加します。conf.d/myhome.conf とか名前を付けて別ファイルにしてもいいかもしれません(未確認)。

NameVirtualHost *:80
<VirtualHost *:80>
    ServerAdmin webmaster@example.jp
    DocumentRoot /home/www/html
    ServerName www.example.jp
    ErrorLog /home/www/logs/error_log
    CustomLog /home/www/logs/access_log combined
    ScriptAlias /cgi-bin/ "/home/www/cgi-bin/"
<Directory "/home/www/html">
    Options FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>
</VirtualHost>

このようにバーチャルホストを設定することにより、デフォルトのDocumentRootが/var/www/html から /home/www/html にすり替わります。また、ログの出力先も変更されていますので、ローテーションも行わないといけません。自前でスクリプトを組むか、/etc/logrotate.d/httpd の1行目を以下のように変更するとイイでしょう。

/var/log/httpd/*log /home/www/logs/*log {

別サイトを立ち上げたいときは、同様の手順で別のユーザを作成し、バーチャルホストを追加していけばよいのです。ServerName を別名にして(例:www2.example.jp)、DNSにCNAMEで追加してあげれば、なんぼでも気軽に別サイトが開けます。

この記事にコメントする

Powered by WordPress, WP Theme designed by WSC Project. ログイン