トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

Apache

Webサーバー

ダウンロード

JAPAN APACHE USERS GROUP
http://www.apache.jp/

Apacheの起動

パッケージのインストール

CDからインストールする場合

# mount /mnt/cdrom
# rpm -Uvh /mnt/cdrom/RedHat/RPMS/mm*
# rpm -Uvh /mnt/cdrom/RedHat/RPMS/apache-1*
 
(注)Red Hat Linux 8.0に同梱されるapache2.0はパッケージ名がhttpdに変更されている。

起動の方法

# /etc/rc.d/init.d/httpd start

もしくは

# /service httpd start

システム再起動後に自動起動を設定

# cd /etc/init.d
# chkconfig --level 35 httpd on

パフォーマンスチューニング

@IT httpd.confによるWebサーバの最適化
http://www.atmarkit.co.jp/flinux/rensai/apache2_03/apache03a.html

起動時の注意事項

GUIから操作した場合、サービスで起動設定(チェック)したあと起動する。
そのあとsaveしないと設定が保存されない。

home/~user/public_htmlへアクセスする際、ディレクトリuserのパーミッション(アクセス権限)が所有者のみ(700)で表示されない(パーミッションエラー)。
ユーザーを作った際の最初の状態は700なので要注意。

# cd /home
# chmod 755 user

ユーザー名とパスワードでアクセス制御

Basic認証とDigest認証を使ってみる。
違いは、Basic認証がプレーンテキストをmimeエンコードしたものを認証情報として送信するのに対し、Digest認証はMD5で暗号化して認証情報を送信する。
盗聴に対してDigest認証のほうが良いが、Digest認証に対応したクライアント(ブラウザとか携帯)でなければならない。

 Basic認証

必要なモジュールは

# vi /etc/httpd/conf/httpd.conf
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_user_module modules/mod_authz_user.so

mod_auth_basicは基本認証のフロントエンドを提供し、mod_authn_fileは.htpasswdファイルを利用するバックエンドを提供する。

httpd.confにアクセス制御するための記述

<Directory "/home/*/public_html">
    AllowOverride AuthConfig
</Directory>

とすると、pabulic_htmlディレクトリ以下に置かれた.htaccessの認証が使える。

アクセス制御したいディレクトリ内に.htaccessを作成(以下ファイル内容)

$ vi .htaccess
AuthUserFile /home/user/.htpasswd             # authn_file
AuthName "Please insert your password !"
AuthType Basic                                # auth_basic
require valid-user                            # authz_user

AuthUserFileで.htpasswdの在り処(絶対パス)を指定する。
.htpasswdはどこに置いてもOK。
誤記入があると、ブラウザでアクセスしたときにmiss configuretionのエラーが出る。
AuthNameは何を入力しても良いが、複数の認証がある場合は重複してはいけない。

.htaccessのAuthUserFileで利用する.htpasswdファイルを作成する。

$ htpasswd -mc /home/user/.htpasswd hoge
New passwoed: fuga
Re-type new password: fuga
Adding password for user hoge

上記はユーザhogeのパスワードfugaで認証とした例。
.htpasswdを作る際の注意は、ファイルの属性。rootのまま作ってしまうとよろしくない。
ファイル属性を644に変更すること。

htpasswdの使い方は

$ htpasswd

で確認できる。

ちなみに

-m パスワードをMD5で作成(デフォルトは-dオプション:Crypt)
-c .htpasswdファイルの新規作成。追加する際はつけないこと。

 Digest認証

必要なモジュールは

# vi /etc/httpd/conf/httpd.conf
LoadModule auth_basic_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_user_module modules/mod_authz_user.so

やり方はBasic認証とほぼ同じ。

$ vim .htaccess
AuthUserFile /home/user/.htdigest
AuthName "members"
AuthType Digest
require valid-user

パスワードの作成は

$ htdigest -c .htdigest "members" hoge
Adding password for hoge in realm members.
New password: fuga
Re-type new password: fuga

.htaccessのAuthName "members"とhtdigestの"members"は合わせる必要がある。

 その他

  • authはフロントエンド(認証方法と入力)
  • authnはバックエンド(ユーザー情報の保存、読み出し)
  • authzはアクセス制御
モジュール一覧表
http://httpd.apache.org/docs/2.2/ja/mod/

ホストでアクセス制御

# httpd.conf
LoadModule authz_host_module modules/mod_authz_host.so

一旦、すべてを許可し、その後拒否する場合。

<Directory "/hoge/fuga">
  Order Allow,Deny
  Allow from all
  Deny from xxx.xxx.xxx.0/24
  Deny from yyy.yyy.yyy.yyy
</Directory>

その逆。

<Directory "/hoge/fuga">
  Order Deny,Allow
  Deny from all
  Allow from hoge.co.jp
</Directory>

 管理者以外が.htpassedファイルを作成するには

そうはいってもサーバーを直接操作できる人しかこんなコマンド入力できませんから、外部のパスワード生成ツールを使用して、.htpasswdファイルを作成します。

パスワードデータ生成ツール
http://www1.neweb.ne.jp/user_manual/htaccess/htpasswd.html

.htpasswdファイルは単なるテキストファイルなので、上記リンク先で生成したユーザー名:暗号化パスワードをコピペします。

user:g3IDfxAdFxpkQ

この.htpasswdファイルをFTPを使用し、userフォルダへアップします。

 検索エンジン(ロボット)のクロールを制限する

テストサイトで製作中のWebページをインデックスされないようにするには、robots.txtをWebルート(Document Root)に配置する。
下記はすべてのエージェントに対し、ルートディレクトリ以下のインデックスを制限。

User-agent: *
Disallow: /

httpd.confの設定

Option Indexes FollowSymLinks はIndexes とFollowSymLinks の2つを設定している。
Indexesはindex.html等のファイルが存在しない場合、ディレクトリを表示する。
これはサイト構成が丸見えになるので、見られたくないときは項目より削除する。
FollowSymLinksはシンボリックリンクを有効にする。

以下に必要そうな設定を書き記す。

http.confよりディレクトリ名の最後にはスラッシュを入れないこと

○ DocumentRoot "/var/www/html"
× DocumentRoot "/var/www/html/"

UserDir www

ダブルクォーテーションはあってもなくても大丈夫っぽい。

cgiの設定は

AddHandler cgi-script .cgi .pl

<Directory "/home/*/public_html/cgi-bin">
 	Options +ExecCGI
</Directory>

という記述があること。 あとperlはもちろん組込まれていること。
perlの実行ファイルは、usr/bin/perlにあるのかusr/local/bin/perlかをチェック。
RHではデフォルトでusr/bin/perlに実行ファイルがあり、面倒なので
usr/local/bin/perlへ実行ファイルへのシンボリックリンクを作成した。

cgi-binディレクトリのパーミッションは755。

AddHandlerとAction

拡張子hogeのファイルが呼ばれたときの動作をhogehogeとする場合。

AddHandler hogehoge .hoge

hogehogeをphp.cgiとする場合。

Action hogehoge /cgi-bin/php.cgi

これにより、Webからsample.hogeにアクセスすると

sample.hoge → /cgi-bin/php.cgi sample.hoge

という動作になる。

標準のハンドラとしては

  • default-handler:(core)
  • send-as-is:(mod_asis)
  • cgi-script:(mod_cgi)
  • imap-file:(mod_imap)
  • server-info:(mod_info)
  • server-status:(mod_status)
  • type-map:(mod_negotiation)

詳細は

Apache のハンドラの使用
http://httpd.apache.org/docs/2.0/ja/handler.html

AllowOverride

.htaccessを使ってhttpd.confの設定を上書き(変更)できるかどうかを許可する設定。

AllowOverride All

とすれば、すべての設定が.htaccessで行えて便利だが、セキュリティ的には必要な項目のみ許可したほうがよい。

.htaccessでphp_flagやphp_valueを使えるようにするには

AllowOverride Options

が必要。

普通は認証(AuthConfig)やmod_rewrite(FileInfo)、アクセス制御(Limit)をすることが多いため、

AllowOverride AuthConfig FileInfo Limit

と設定されることが多い。

core - Apache HTTP サーバ AllowOverride ディレクティブ
http://plutokiss.org.ua/manual/ja/mod/core.html#allowoverride

mod_rewrite

ryusendo.no-ip.comで運用を続けていたが、www.ryusendo.netに移行するためURLの書き換えを行う。
httpd.confのバーチャルホストに対し設定。

<VirtualHost 203.83.246.244:80>
    ServerAdmin root@mail.ryusendo.net
    DocumentRoot /home/hoge/public_html
    ServerName ryusendo.net
    ServerAlias www.ryusendo.net ryusendo.no-ip.com
    ErrorLog logs/www.ryusendo.net-error_log
    CustomLog logs/www.ryusendo.net-access_log common
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^ryusendo.no-ip.com
    RewriteRule ^/(.*) http://www.ryusendo.net/$1 [R=301,L]
</VirtualHost>

RewriteCondは条件を設定するもので、%{HTTP_HOST}にはホスト名(ryusendo.no-ip.comやwww.ryusendo.netなど)が入ってくる。
その文字列の先頭から照合し、ryusendo.no-ip.comだったら、以下のルールを設定。
RewriteRuleが実際のルールを記述する部分。
ドメイン名の/以下を取得し$1に割り当てる。
それをwww.ryusendo.netへリダイレクト([R])することでURLの書き換えが完了する。

R=301はリダイレクトでステータスコード301(永久に移動した)という意味らしい。
引越しの際に検索エンジンなどに有効だとか。
Lは条件にマッチしたときに、以降にRewriteRuleがあっても処理しないというもの。
書いておいたほうがよさそう。

詳細については↓を参照した。

Apache module mod_rewrite
http://www.net-newbie.com/trans/mod_rewrite.html

ステータスコードについては↓

mod_rewrite
http://tech.bayashi.net/svr/doc/apache/mod_rewrite.html
Apache mod_rewriteリファレンス
http://blog.dawgsdk.org/weblog/archives/411011

CGIが実行されない場合

ユーザーIDとグループIDが一致していないとCGIが実行されないようだ。
ユーザーの追加時にプライマリグループとして追加する。
エラー発生時は var/log/httpd/suexec.log にミスマッチとのログが残される。

mod_perl

mod_perlApache::Registryで走らせれば、perlのレスポンスが上がるようなので利用を検討する。

使用環境バージョン
RedHatLinux8
Apache2.0.40
mod_perl1.99_05.3

早速mod_perlを使用できるディレクトリを設定した。

しかし、newが見当たらないみたいなエラーがでる。

Can't locate object method "new" あたりの記事
http://lists.sourceforge.jp/mailman/archives/sledge-users/2003-July/000148.html

この記事にあるApache::Requestというのが、うちの環境ではどうなっているのか確認してみた。

[test.cgi]

use Apache::Request;

my $r = Apache::Request->new();
$r->send_http_header('text/html');
$r->print("Hello World");

Can't locate Apache/Request.pm in @INC(...
というようなエラーがでるため、インストールされていないようである。

Apache::Requestについて検索していると、MovableTypemod_perlで実行という記事を発見。下記参照。

NDO::Weblog
http://naoya.dyndns.org/~naoya/mt/archives/000393.html
ALTERNATE ENVIRONMENTS
http://siteas.net/MT/docs-j/mtmanual_alternate.html#mod_perl