Webサーバ(Apache)
Webサーバ(Apache)
RedHat9.0には標準でApache(httpd)がRPM形式でインストールされています(2.0.40)。Apacheは「httpd」というサービスで提供されるWebサーバです。HTTP/HTTPSを使用したサイトを立ち上げる場合のサーバプログラムとしてよく使われます。
からソースをダウンロードし、ビルド作業を行います(2005/06現在は2.0.54が最新)。Webサーバはセキュリティに気を使う必要があるため、常に最新版でアップデートすることをおすすめします。
Apacheのインストール前に
RPM形式でApacheが存在するか、
rpm -qa | grep httpd
にて確認します。最新をソースからビルドする場合は
rpm -e httpd
のように関連ファイルをアンインストールしていきます。
Apacheのビルド
ソースをダウンロードし「htpd-2.0.54.tar.gz」を解凍して、展開したディレクトリに移動します。
tar xvfz httpd-2.0.54.tar.gz cd httpd-2.0.54
ビルドは以下の手順で行ってます。なお、SSL対応/WebDAV対応のオプションを有効にしています。
./configure --enable-module=all --enable-mods-shared=most --enable-ssl --enable-shared=yes enable-dav=yes make make install
「./configure」は1行で入力します。その後、「make」を実行、「make install」を実行で、「/usr/local/apache2」にApacheの関連ファイルがインストールされます。
configureのオプション指定は御本家の「http://httpd.apache.org/docs-2.0/」に日本語で詳しく乗ってますので(というよりもApacheについての設定なども含めて)まずはこちらを見るほうがいいかもしれません。
設定ファイルを調整
そのままApacheを起動すればWebサーバが立ち上がることになりますが、デフォルトではテストページなども参照できるようになってます。ですので、自分で作ったテストページが表示できるように調整します。
設定ファイルとして「/usr/local/apache2/conf/httpd.conf」を編集することになります。要チェックの部分のみ説明します。
ServerRoot
Apacheをインストールしたディレクトリです。たぶん、そのままでOKです(インストーラが自動で設定してくれています)。
ServerRoot "/usr/local/apache2"
ServerAdmin
ServerAdmin admin@xxxx.co.jp
これは、エラーページで表示されている管理者のメールアドレスです。特にWebサーバのシステムで使用するわけではないですが、設定しておきましょう。
ServerName
Webブラウザでアクセスする場合のURLを指定します(つまり、これがサーバ名)。
ServerName www.xxxx.co.jp:80
クライアントからは「www.xxxx.co.jp」でアクセスできることになります。コロンの後の80はHTTPでのポート番号です(省略可能)。
DocumentRoot
実際のHTMLファイルを置く位置(ディレクトリ)を指定します。
DocumentRoot "/var/html/htdocs"
これは、ユーザから参照できないようなところにするのが無難です。ここでは「/var/html/htdocs」にHTMLファイルを配置するものとします。
HTMLを配置するディレクトリの設定
Webサーバ上で管理するルートディレクトリでのアクセス情報などを指定します。Directoryの後のダブルクォーテーションでDocumentRootで指定したディレクトリを入れてます。
<Directory "/var/html/htdocs"> Options FollowSymLinks Indexes Includes MultiViews ExecCGI AllowOverride All Order allow,deny Allow from all </Directory>
Optionsの「FollowSymLinks」でシンボリックリンクもたどる対象にしています。「Indexes」でURLでディレクトリ指定された場合に、ディレクトリ内のファイル一覧を列挙します。「ExecCGI」はPerlなどのCGI実行を有効にします。「AllowOverride All」で、各ディレクトリごとの「.htaccess」ファイルの指定を有効にします。「Order allow,deny」で、許可・拒否の順にアクセス制御を行います。「Allow from all」アクセスを許可するホスト(IPアドレスなど)を指定しますが、ここではallでフルアクセスしてます。制限をかけたい場合に使用します。
しかし、ディレクトリ内のファイルが表示されたり、ルートでCGI実行ができてしまうのは怖いです。ので、必要な項目以外はカットしてしまいます。
<Directory "/var/html/htdocs"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>
CGIが必要な場合や「.htaccess」が必要な場合は、別ディレクトリを作れば対処できますので、ルートはただ単にHTMLファイルがみることができるだけ、としておきます。
なお、
Alias /icons/ "/usr/local/apache2/icons/" <Directory "/usr/local/apache2/icons"> ... </Directory>
みたいな「Alias」「Directory」の組み合わせが複数あります。特に使用しないのであれば、これらをコメントにしてアクセスできないようにします。
たとえば、「/icons」が有効な場合、「www.xxxx.co.jp/icons/xxx.gif」みたいにしてアクセスできるようになります。実体(実際のディレクトリ)は「/usr/local/apache2/icons/xxx.gif」です。
DirectoryIndex
ファイル名が省略して指定された場合の、とりあえず呼び出すファイル名を指定します。
DirectoryIndex index.html index.html.var index.htm
CGIを置くディレクトリを指定
ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
これで「/usr/local/apache2/cgi-bin/」内にPerlなどのファイルを置くことにより、CGI実行が可能になります。このときのURLのディレクトリは「cgi-bin」となります。
http://www.xxxx.co.jp/cgi-bin/hoehoe.pl
みたいにアクセスできます。なお、ScriptAliasのディレクトリ名の最後が「/」である点に注意してください。
ルート以外のディレクトリを参照
上記では「/var/html/htdocs」をルートとしましたが、それ以外のディレクトリを参照したい場合もあります。
Alias /test/ "/home/htdocs/" <Directory "/home/htdocs"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>
上記のような追加を行うと、「www.xxxx.co.jp/test/hoehoe.html」みたいにブラウザから呼ぶときに「/home/htdocs/hoehoe.html」をみることができるようになります。
コンテンツを分けて管理したい場合に、このような方法は使えますね。また、各Aliasごとに「.htaccess」の使用やアクセス許可設定を行うことができます。
なお、Aliasのディレクトリ指定では最後に「/」をつける、<Directory>のところでは「/」を末尾につけない、という点に注意してください。
日本語文字化け対策
Linux上でApacheを運用する場合、2バイト全角が化けてしまう、という現象にまれに出くわします。設定ファイル「httpd.conf」にて、以下の二カ所を見直すことで回避できることが多いです。
AddDefaultCharset off
「AddDefaultCharset」の記述部分でoffを指定します。デフォルトの文字列はApache内では「iso-8859-1」らしく、これを使用しないようにしてます。
また、
LanguagePriority ja en ca cs da ...
のように、「LanguagePriority」で日本語(ja)を先頭に持ってきます。
Apacheサービス起動
/usr/local/apache2/bin/apachectl start
Apacheサービス停止
/usr/local/apache2/bin/apachectl stop
Apacheサービス再起動
/usr/local/apache2/bin/apachectl restart
Future's Laboratory 技術格納庫 2004-2013 Yutaka Yoshisaka.