Apache 2

古い Apache 1 のページをとりあえず更新したものです。

News

はじめに

Apache はたいていの Linux などのディストリビューションに入っているはずですので,ソースからコンパイルする必要はありません。 ソースからのコンパイルは,最新版を追い求める人だけお試しください。

ソースからのコンパイル

ソースコードは The Apache Software FoundationThe Apache HTTP Server Project で配布されています。ダウンロードは 適当なミラー から行いましょう(例えば RingServer/pub/net/apache/httpd/ にもミラーされています)。 Apache にはバージョン 1.x のものと 2.x のものがありますが,ここでは 2.x のもの(httpd-2.X.YY.tar.gz といったファイル名)を使います。

すでに古い Apache がインストールされているなら消しておきます。

/etc/rc.d/init.d/httpd stop
rpm -e apache mod_ssl

あらかじめユーザ www,グループ www を作っておきます(どんな名前でもかまいません。 最近の Vine Linux では apache/apache というユーザ/グループがあるようですのでそれを流用するのがいいでしょう)。

/etc/passwd
www:x:98:98:www:/:/bin/false
/etc/group
www:x:98:

Vine Linux 4.1では apt-get install openssl-devel しておきます。

まずソースを展開してコンパイルします。 後で PHP を使うために Dynamic Shared Object の設定 --enable-so をしておきます。

cd httpd-2.2.4
CFLAGS="-O2" ./configure --enable-so --enable-auth-digest --enable-dav --enable-ssl --enable-rewrite
make
make install

デフォルトのインストール場所は /usr/local/apache2 以下になります(Apache 1.x では /usr/local/apache でした)。 場所を変えるには configure に --prefix=/opt/local/apache2 のようなオプションを付けます。

httpd.conf の設定

次に,/usr/local/apache2/conf にある httpd.conf を編集します。

User daemon
Group daemon

となっているところは,前にも書いたように,できれば www あるいは apache といったユーザ/グループを作って,

User www
Group www

などとします。

ServerAdmin は適当なメールアドレスにします。 例えば

ServerAdmin webmaster@example.ac.jp

として,webmaster を管理人の別名として登録するといいでしょう。

ServerName はホスト名です。たとえば

ServerName www.example.ac.jp:80

とします。 実験的に自分のマシンで動かすなら 127.0.0.1 でもかまいません。

<Directory "/usr/local/apache2/htdocs">

から

</Directory>

の中で一般的な設定をします。最初は

Options Indexes FollowSymLinks
AllowOverride None

となっていますが,自由度を最大限に上げるには

Options All
AllowOverride All

とします。 All に加えて MultiViews オプションも付けると content negotiation を自動で行いますが,パフォーマンスはかなり落ちます。 この用途には .var ファイルを使うほうがいいでしょう。 AllowOverride を All にするのは,後で .htaccess で自由に設定を変えるためです。

次の

DirectoryIndex index.html

となっているところは,たとえば

DirectoryIndex index.html index.htm index.php index.cgi index.pl index.rb index.html.var

といった具合にすると,index.html 以外のファイル名でも省略できるので,便利です。

<FilesMatch "^\.ht">
    Order allow,deny
    Deny from all
</FilesMatch>

は見せないファイルの設定です。同様に

<FilesMatch "~$">
    Order allow,deny
    Deny from all
</FilesMatch>

などとしておくとEmacsのバックアップファイルが見えてしまうことを防ぎます。

CustomLog logs/access_log common

をコメントアウトして,代わりに

CustomLog logs/access_log combined

とするとログファイルにuser agentやrefererの情報も入ります。

MIME type の不明なバイナリファイルがブラウザに表示されてしまうことを防ぐために

DefaultType text/plain

DefaultType application/octet-stream

にしておくといいかもしれません(場合によります)。

CGIを使うなら,

#AddHandler cgi-script .cgi

は,コメントを外して,ついでに Perl や Ruby のために次のようにしておくと便利です。

AddHandler cgi-script .cgi .pl .rb

PHP を使うなら,PHP インストール時に httpd.conf が書き換えられて次のいずれかの行が追加されるはずです。

LoadModule php4_module modules/libphp4.so
LoadModule php5_module modules/libphp5.so

さらに次の2行がなければ追加しておきます。

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

言語関係は 2.2 では extra/httpd-languages.conf に移りました。 ここでは LanguagePriority リストの先頭に ja を持っていきます。 なお,古い Apache では次の行がありましたが,これはコメントアウトしておかないと文字化けが起こります。

AddDefaultCharset ISO-8859-1

実行

起動,終了,再起動はそれぞれ

/usr/local/apache2/bin/apachectl -k start
/usr/local/apache2/bin/apachectl -k graceful-stop
/usr/local/apache2/bin/apachectl -k graceful

です。 /etc/rc.d/rc.local の下のほうに

/usr/local/apache2/bin/apachectl -k start

と書いておいてもいいのですが,今のVineなどRed Hat系の方式では次のようにします。

cp build/rpm/httpd.init /etc/rc.d/init.d/httpd

ここで /etc/rc.d/init.d/httpd の中のパス名を適宜直します。例えば httpd.pid は /usr/local/apache2/logs の中に入ります。

/sbin/chkconfig --level 345 httpd on
/etc/rc.d/init.d/httpd start

/etc/logrotate.d/apache2 は /var/log/httpd と /var/run を /usr/local/apache2/logs に直しておきます。

SSL

SSL対応にするには,configure に --enable-ssl を付けます。 openssl,openssl-devel がインストールされていなければなりません。

cd /usr/local/apache2/conf
ln -s /etc/httpd/conf/ssl.crt .
ln -s /etc/httpd/conf/ssl.key .
/usr/local/apache2/bin/apachectl -k startssl

Apache 2.2 では startssl ではなく単に start とします。 これで一応できますが,ちゃんとした証明書が欲しいところです。 ここでは CAcert という無料のCAで証明書を取得することにします。

上記の証明書でもいいのですが,最初からやってみます。

cd /etc/httpd/conf  # Vineなら/etc/apache2/conf
/usr/bin/openssl genrsa 1024 > ssl.key/server.key
/usr/bin/openssl req -new -key ssl.key/server.key -out ssl.csr/server.csr

いろいろ聞いてきます(実際にCAcertで使われるのはCommon Nameだけ):

Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Mie
Locality Name (eg, city) []:Tsu
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Mie University
Organizational Unit Name (eg, section) []:Okumura Lab
Common Name (eg, YOUR name) []:oku.edu.mie-u.ac.jp
Email Address []:root@oku.edu.mie-u.ac.jp

残りはすべてEnterだけ。 この server.csr を CAcert に送れば無料で証明書を発行してもらえますので,それを ssl.crt/server.crt にしてApacheを再起動します。

別の手段として,自己署名証明書を作ってしまうことも考えられます。 もともとの server.crt も自己証明証明書ですが,名前等が正しくないので,次のように打ち込んで,名前等を直すことができます。

openssl req -new -key ../ssl.key/server.key -x509 -days 365 -out server.crt

WebDAV

WebDAV は HTTP 上に構築された次世代のファイル共有プロトコルです。 .Mac の iDisk も AFS から WebDAV ベースに変更されました。

Apache 2 では ./configure に --enable-dav=yes を付けていれば,httpd.conf に次を追加するだけで WebDAV が使えます。

<Location /dav>
  DAV on
</Location>
DAVLockDB /usr/local/apache2/var/DAVLock

/usr/local/apache2/htdocs/dav と /usr/local/apache2/var/ はユーザ www が書き込めるようにしておきます。 後者のディレクトリにはロックファイル DAVLock.dir,DAVLock.pag が入ります。

これで,Mac OS X なら Finder で「移動」→「サーバへ接続」で http://サーバ名/dav とすればつながります。

サーバ上の場所は /usr/local/apache2/htdocs/dav になります。 これが嫌なら次のようにして別の場所を指定できます。

Alias /dav /path/to/somewhere

これだけでは誰でもアップロード/ダウンロードできてしまいますので,例えば次のようにダイジェスト認証を設定します。

<Location /dav>
  DAV on
  AuthType Digest
  AuthName "DAV"
  AuthDigestFile /path/to/somefile
  Require valid-user
</Location>
/usr/local/apache2/bin/htdigest -c /path/to/somefile DAV someuser

と打ち込むと someuser さんのパスワードを聞いてきますので,2回打ち込みます。

これで Mac OS X なら日本語ファイル名(utf-8)を含め何の問題もないようです。 ドラッグ&ドロップやダブルクリックができます。 /Volumes/dav にマウントされますので,Emacs などでもローカルファイルと同じように編集できます。 Windows XP(マイネットワーク→ネットワークプレースを追加する)ではいろいろトラブルが生じるとのことです。

UNIX互換OSのコマンドラインで使えるクライアント cadaver があります。 ちょうど ftp コマンドのように使えて便利です。

参考サイト

個人ごとのサイトがうまく公開できないとき

個人のホームディレクトリに public_html ディレクトリを作り,その中に index.html を入れてうまくいかない場合は,たいていホームディレクトリのパーミッションが悪いのでしょう。 700ではうまくいきません。 少なくとも 701 にしておく必要があります。

これ以外に,SELinuxが設定されている場合は,

restorecon -R /home

それでも駄目なら

chcon -R -h -t httpd_sys_content_t /home

のようなことをする必要があるかもしれません。

あと,suEXECがオンになっている最近の設定で,番号の低いグループでCGIが動かないといったトラブルが発生するようです。suEXECをオフにするには,/usr/sbin/suexec を別の名前に変えて,apachectl restart します。Vine Linux 4.* では /usr/lib/apache2/suexec を削除またはリネームして /usr/sbin/apache2ctl restart します。これをしても,apt-get で更新した際にまた入ってしまうことがあり,注意を要します。

参考サイト

http://www.srvjp.net/?cx=003329386177465831517%3Ajdvs2yb580y&q=apache&sa=Search&cof=FORID%3A9#990


Last-modified: 2008-04-12 (土) 14:00:15 (3510d)