最終更新日 2005/06/07
Apache
Apacheとは
Apacheに必要なパッケージ
Apacheのインストール
Apacheの起動・制御パラメータ
Apacheの確認・チェック
Apacheの設定ファイル
ApacheでのCGI実行環境
ApacheでのユーザごとのHP公開
Apacheのアクセス制限
Apacheのパスワード認証
ApacheのエラーページApacheとは
Apacheは、GNU/Linuxシステム上で標準的(デファクトスタンダード)に利用されるWEBサーバ・プログラムです。高機能で高速な処理が可能です。また動的なモジュールの扱いができ自由にカスタマイズできますので、企業などの大規模なサーバから 小規模ホームサーバまでをカバーします
Apacheのパッケージ
バイナリ(RPM)版は、CDROM又はディストリビューションのホームページより入手します。ソースファイルは、「JAPAN APACHE USERS GROUP」より入手可能です。
apache2関連パッケージ(Fedora Core3)
| パッケージ | 内容 |
| apr-x.x.x-xx.i386.rpm | Apache Portale Runtimeライブラリ |
| apr-util-x.x.x-xx.i386.rpm | Apache Portale Runtimeユーテリティ |
| httpd-x.x.xx-x.i386.rpm | apache2の本体 |
| httpd-suexec-x.x.xx-x.i386.rpm | SuExec環境でのCGIプログラムの実行 |
| httpd-manual-x.x.xx-x.i386.rpm | apache2のオンラインマニュアル |
| webalizer-x.xx_xx-xx.i386.rpm | WEBサーバログ解析プログラム |
ソースファイル
Apache本体 http://www.apache.jp/dist/httpd/httpd-2.0.53.tar.gz
Apacheのインストール
Apacheインストール(RPM)
RPM版のApacheは「RPM」コマンドを使用して行います。本体(httpd)をインストールする前に、Apache Portale Runtimeライブラリ(aprとapr-util)が必要です
マニュアルやログ解析プログラムは必要に応じて、インストールしてください。
# rpm -ivh postfix-2.1.5-2.2.i386.rpm # rpm -ivh apr-x.x.x-xx.i386.rpm # rpm -ivh apr-util-x.x.x-xx.i386.rpm # rpm -ivh httpd-x.x.xx-x.i386.rpm |
Apacheインストール(ソースファイル)
ソースファイルのインストールは、ダウンロードしたファイルをtarコマンドで展開して、出来たディレクトリに移動します。configureにオプションを付けることで、DSO対応にしたり、モジュールを自由に組み込むことがでます。
ここでは、DSO対応でモジュールも組み込んでくれるオプション(--enable-module=most)をつけます。
オプションやインストール方法は、iINSTALLファイル・READMEファイルを参考にしてください。
configureが終わったら、makeしてその後ルートユーザになりmake installします。
|
$ tar zxvf httpd-2.0.53.tar.gz $ cd httpd-2.0.53 $ ./configure --enable-module=most $ make $ su # make install |
Apacheの起動・制御パラメータ
Apacheの起動(RPM)
RPMからインストールした場合はApacheの起動・停止・再起動などの操作は、「service httpd 引数」という形で行います。または、「/etc/rc.d/init.d/httpd 引数」と実行をします。
起動 # /service httpd start 停止 # /service httpd stop 再起動 # /service httpd restart |
Apacheの起動(ソース)
ソースからインストールした場合Apacheの起動・停止・再起動などの操作は、「/usr/local/apache2/bin/apachectl 引数」という形で行います。起動 # /usr/local/apache2/bin/apachectl start 停止 # /usr/local/apache2/bin/apachectl start 再起動 # /usr/local/apache2/bin/apachectl start |
httpd制御のパラメータ
| パラメータ | 動作 |
| start | httpdの起動 |
| stop | httpdの停止 |
| restart | httpdの再起動 |
| reload | httpdの設定ファイルの再読み込み |
| graceful | 現在のリクエストを処理した後に停止 |
| condrestart | httpdのプロセスが動作していれば再起動 |
| status | httpdの状態を表示(簡易) |
| fulstatus | httpdの状態を表示(すべて) |
| configtest | httpdの設定ファイルの文法チェック |
| help | httpdのコマンドライン引数の表示 |
Apacheの起動チェック
Apacheを起動したら、Apacheプロセスの確認を「ps」コマンドを用いて行います。「ps aux」ですべてのプロセスを表示して、その結果をパイプで「grep httpd」コマンドに渡します。
# ps aux|grep httpd root 24702 0.0 0.9 23012 352 ? S Jan30 0:07 /usr/sbin/httpd apache 24705 0.0 4.9 23248 1856 ? S Jan30 0:00 /usr/sbin/httpd apache 24706 0.0 5.5 23248 2072 ? S Jan30 0:00 /usr/sbin/httpd apache 24707 0.0 2.1 23248 788 ? S Jan30 0:00 /usr/sbin/httpd apache 24708 0.0 2.0 23248 780 ? S Jan30 0:00 /usr/sbin/httpd apache 24709 0.0 1.8 23248 680 ? S Jan30 0:00 /usr/sbin/httpd apache 24710 0.0 1.8 23248 688 ? S Jan30 0:00 /usr/sbin/httpd apache 24711 0.0 1.8 23248 708 ? S Jan30 0:00 /usr/sbin/httpd apache 24712 0.0 1.9 23248 744 ? S Jan30 0:00 /usr/sbin/httpd root 5354 0.0 1.8 4792 688 pts/1 S 15:41 0:00 grep httpd |
プロセスの起動が確認できたら、実際ホームページが表示されるかどうかチェックします。
telnetでhttpdが利用する80ポートにアクセスをします。アクセスしたら「GET / HTTP1.1」を入力し、エンターキーを2回押します。
# telnet localhost 80 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. GET / HTTP1.1 HTTP/1.1 403 Forbidden Date: Wed, 23 Feb 2005 06:52:18 GMT Server: Apache/2.0.47 (Fedora) Accept-Ranges: bytes Content-Length: 3886 Connection: close Content-Type: text/html 〜省略〜 |
Apacheの設定ファイル
Apacheの設定ファイルの場所は、RPM版・ソース版それぞれ異なります。設定ファイルの名前や書式は同じです。| インストール方法 | 設定ファイルの場所 |
| RPMファイル | /etc/httpd/conf/httpd.conf |
| ソースファイル | /usr/local/apache2/conf/httpd.conf |
書式1: ディレクティブ 値
代表的なディレクティブ| ディレクティブ | 説明 |
| ServerName | サーバのFQDN |
| ServerType | デーモンをして起動のタイプを指定 |
| ServerRoot | Apacheのルートディレクトリの指定 |
| Timeout | タイムアウトで切れるまでの時間を指定 |
| KeepAlive | キープアライブの有効・無効を指定 |
| LoadModeule | モジュールの指定 |
| AddModule | モジュールの組み込みを指定 |
| MaxReqestsPerChild | 処理できる要求の数を指定 |
| Listen | ポート番号の指定 |
| User | Apacheのユーザを指定 |
| Group | Apacheのグループを指定 |
| ServerAdmin | 管理者のメールアドレスを指定 |
| DocumentRoot | ドキュメントルートを指定 |
| DirectoryIndex | ファイル省略時の補完ファイルを指定 |
| ServerName | Webサーバのドメイン名を指定 |
| ErrorLog | エラーログファイルを指定 |
| CustomLog | アクセスログファイルを指定 |
| ServerTokens | バナー情報の設定 |
ApacheでのCGI実行環境
設定ファイル「httpd.conf」を編集します。まず、「ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"」のスクリプトエイリアスが設定されているか確認します。
<Directory "/var/www/cgi-bin">のディレクトリでオプションで「Options None」「Options ExecCGI」に変更します。
これは、このディレクトリ(/var/www/cgi-bin配下)のみCGIの実行を許可する設定です。
CGIはサーバ側で実行というリスクを伴いますので、セキュリティ上必ず実行するディレクトリを指定します。
「#AddHandler cgi-script .cgi」行の先頭の#(コメントアウト)を外し、最後に「.pl」を追加します。
この作業は、「○○○.cgi」「○○○.pl」のファイル名のものは、CGIスクリプトと判断されるために必要です。
CGI実行環境構築の設定例
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
#
# "/var/www/cgi-bin" should be changed to whatever your ScriptAliased
# CGI directory exists, if you have that configured.
#
<Directory "/var/www/cgi-bin">
AllowOverride All
Options ExecCGI
Order allow,deny
Allow from all
</Directory>
〜中略〜
AddHandler cgi-script .cgi .pl
|
ApacheでのユーザごとのHP公開
ドキュメントルートは一箇所だけのみ設定できますが、これでは複数のユーザが個別のHPを公開することができません。Apacheでは「UserDir」ディレクティブを用いることで、複数のユーザをホームページを提供することが可能になります。
Apacheのモジュール「mod_userdir」を利用します。(標準でモジュールとして組み込まれています。) 設定ファイルである「httpd.conf」を編集します。
設定ファイルの「UserDir disable」の行の先頭に「#」を付けてコメントアウトします。
これは、ユーザディレクトリを使用しないという意味なので、コメントアウトすることにより有効にします。
次に、「#UserDir public_html」の行の「#」を消します。「」を消すことにより有効にし、この場合は ユーザのホームディレクトリの下の「public_html」というディレクトリが、それぞれユーザのドキュメントルートで あることを表しています。
※public_htmlを別(例えばwwwなど)に変えれば、wwwがドキュメントルートになります。
ブラウザから確認する場合のURLは「http://localhost/~ユーザ名/」になります。
設定例
<IfModule mod_userdir.c>
#
# UserDir is disabled by default since it can confirm the presence
# of a username on the system (depending on home directory
# permissions).
#
#UserDir disable
#
# To enable requests to /~user/ to serve the user's public_html
# directory, remove the "UserDir disable" line above, and uncomment
# the following line instead:
#
UserDir public_html
</IfModule>
|
Apacheのアクセス制限
apacheでは、特定のディレクトリやファイルを、クライアントのIP・ドメイン等を用いてアクセス制限を かけることができます。また、パスワード認証も行えます。アクセス制限(ディレクトリ)
ディレクトリに対してのアクセス制御を行う場合は、ディレクティブ(指示子)「Directory」を用います。設定例
1: |
- アクセス制限を行うディレクトリの指定+ディレクトリに対するルールの始まり
- アクセスを許可するクライアントの指定
- アクセスを拒否するクライアントの指定
- AllowとDenyの評価順を指定
- ディレクトリに対するルールの終了
アクセス制限(ファイル)
ファイルに対してのアクセス制御を行う場合は、ディレクティブ(指示子)「Files」を用います。設定例
1: <Files "/var/www/html/test.html"> 2: Allow from 192.168.0.55 3: Deny from All 4: Order Deny,Allow 5: </Files> |
- アクセス制限を行うファイルの指定+ファイルに対するルールの始まり
- アクセスを許可するクライアントの指定
- アクセスを拒否するクライアントの指定
- AllowとDenyの評価順を指定
- ファイルに対するルールの終了
Apacheのパスワード認証
Apacheでのパスワード(ユーザ認証)は、「HTTP Basic認証」と「HTTP Digest認証」の2つが利用できます。Basic認証はパスワードを平文で流しますので、パケットを盗聴されると危険です。
Digest認証はパスワードを暗号化します。パスワードをMD5メッセージ・ダイジェストとしてネットワーク上に流します。 盗聴された場合も、通信内容を簡単に解読できないように、チャレンジ・レスポンス方式を使用しています。
パスワード認証の設定(Basic)
ベーシック認証の設定は、ユーザIDとパスワードを記録したファイルを作成し、apacheの設定ファイル「httpd.conf」の 中で、認証の設定を記述します。 ベーシック認証用のユーザとパスワードは、「htpasswd」コマンドを使用して作成します。新規でパスワードファイルを作成する場合は、「-c」のオプションが必要です。ユーザを追加する場合(2回目以降)は必要ありません。(GNU/Linuxシステムに存在するユーザと同じである必要はありません。)パスワードファイルを保存する場所に決まりはありませんが、必ずWEB上から参照できない場所(DocumentRoot以外)を置きます。設定ファイル「httpd.conf」と同じ場所がいいでしょう。また、パスワードのファイルの名前も決まりはありません。 しかし、参照される可能性もありますのでパスワードファイルと推測されにくい名前にします。(.「ドット」を付けて隠しファイルにします。)
「htpasswd」の実行
# htpasswd -c /usr/local/apache/conf/.htpasswd user1 New password: Re-type new password: Adding password for user user1 |
設定ファイル「httpd.conf」の設定
1: <Directory "/var/www/html/basic"> 2: AuthType Basic 3: AuthName "Member only site" 4: AuthUserFile /usr/local/apache/conf/.htpasswd 5: require valid-user 6: </Directory> |
- アクセス制限を行うディレクトリの指定+ディレクトリ対するルールの始まり
- 「ベーシック認証」を利用する宣言
- クライアントがアクセスした際に表示される認証ダイアログ内のメッセージ
- パスワードファイルの場所を絶対パスで指定
- パスワードファイルに登録されたユーザすべてに対してアクセスを許可する
- ディレクトリに対するルールの終了
パスワード認証の設定(Digest)
ダイジェスト認証の設定は、ベーシック認証とほとんと変わりません。ユーザIDとパスワードを記録したファイルを作成し、apacheの設定ファイル「httpd.conf」の中で、認証の設定を記述します。 ダイジェスト認証用のユーザとパスワードは、「htdigest」コマンドを使用して作成します。 書式はほとんど同じですが、一つだけ引数が増えます。「realm」と呼ばれる認証領域につける名前です。
「htdigest」の実行
# htdigest -c /usr/local/apache/conf/.htdigest member user1 Adding password for user1 in realm member. New password: Re-type new password: |
設定ファイル「httpd.conf」の設定
1: <Directory "/var/www/html/digest"> 2: AuthType Digest 3: AuthName member 4: AuthDigestFile /usr/local/apache/conf/.htdigest 5: require valid-user 6: </Directory> |
- アクセス制限を行うディレクトリの指定+ディレクトリ対するルールの始まり
- 「ダイジェスト認証」を利用する宣言
- 認証領域につける名前(realm)の指定
- パスワードファイルの場所を絶対パスで指定
- パスワードファイルに登録されたユーザすべてに対してアクセスを許可する
- ディレクトリに対するルールの終了
Apacheのエラーページ
Apacheでは、クライアントのリクエストがエラーだった場合(指定したページが存在しない)に対して、エラーページを表示します。例えば、ファイルが存在しない場合は、「404 File not Found」と表示されます。
最初の"404"はステータスコードを呼ばれるもので、エラーだけではなくいろんなステータスコードがあります。
主なエラーステータス
| ステータスコード | メッセージ | 意味 |
| 401 | Authorization Required | 認証に失敗した |
| 403 | Forbidden | アクセス権がない |
| 404 | File not Found | ファイルが存在しない |
| 500 | Internal Server Error | サーバ内部のエラー(CGI等のエラー) |
上記が主な(よく見かける)エラーステータスです。
上の4つのエラーについては、Apacheはデフォルトのページを持っていますが、オリジナルのエラーページに変更します。
Apacheの設定ファイル(httpd.conf)を編集して、オリジナルのエラーページを作成します。
「ErrorDocument」ディレクティブを探して編集をし、指定した場所にエラーページを作成します。
書式は、「ErrorDocument エラーステータスコード エラーページのファイル名」になります。
"エラーページのファイル名"は、サーバルートからの相対パスで指定をします。
httpd.confの設定例
1: ErrorDocument 401 /error/401.html 2: ErrorDocument 403 /error/403.html 3: ErrorDocument 404 /error/404.html 4: ErrorDocument 500 /error/500.html |
- エラーステータスコード"401"の場合は、「/error/401.html」ファイルを表示
- エラーステータスコード"403"の場合は、「/error/403.html」ファイルを表示
- エラーステータスコード"404"の場合は、「/error/404.html」ファイルを表示
- エラーステータスコード"500"の場合は、「/error/500.html」ファイルを表示
Top