Apache 2.x系 http server の導入・設定

※プログラム動作確認のために、CGI実行可能にするための設定・導入が必要です。
2009年7月8日 18:09 更新

→2006年度までの入学生パソコンに関する情報はコチラ (Linux + MacOSX)


2009年度以降、Apache 2.x系で統一します。

各自で導入と設定を行って下さい。しかしながら、特に Vista上のCygwinは動作不調となるケースがあるので、その場合は、Cygwinを全て再インストールしてから最初から手順を実行してみてください。

[1] Cygwinの導入・各種パッケージのインストール等

[2] Windowsサービスにcygserverを登録等 ※動作検証中!

[3] Apache2の起動・停止のテスト

[4] Apache2設定ファイルの修正(~user/public_html/下でCGI実行可にする)

リンク: Baseの再構築方法(*.dllが不正でapache2が起動できない場合の対処)

トラブル Q and A


[1] Cygwinの導入・各種パッケージのインストール

[1-1] Cygwin上へ各種パッケージをセットアップ

(1) Cygwin導入(基本パッケージ)

・以下のURLへアクセスして、Cygwinのインストーラ(setup.exe)をダウンロード&実行する。
http://www.cygwin.com/setup.exe

・ダウンロード元は、http://ftp.jaist.ac.jp/ などは近くて速い。
・Select Packages で、以下の基本パッケージをインストールする。
- Base : install
- Devel : install
- Doc : install
- Editors : install

・インストールが終わったら、デスクトップ上の「Cygwin」アイコンからbashシェルを開いて、gcc -V などして、コンパイラが入っておれば成功。

(2) Admin, Perl, Apache関連パッケージをインストール

※注意! Adminパッケージの追加インストールが必要となりました。

・引き続いて、Admin, PerlとApache httpサーバをインストールする。setup.exeを再度実行する。

・Select Packages で、以下のパッケージをインストールする。
- Admin : install
- Perl : install
- Web : install

・インストールが終わったら、デスクトップ上の「Cygwin」アイコンからbashシェルを開いて、perl -V などして、Perlが入っておれば成功。Apache(ver.2)デーモンは、/usr/sbin/httpd2 として入る。

[1-2] CYGWIN システム環境変数の設定(最初の一回だけ)

(1) [マイコンピュータ]右クリックメニュー --> [プロパティ] --> <システムのプロパティ>ウィンドウ の [詳細設定]タブ をクリック(管理者パスワードを聞かれる場合がある)

(2) 環境変数 --> システム環境変数 に 以下を新規追加する。

 変数名:CYGWIN
 変数値:ntsec server

(3) 環境設定関係 [OK] ボタンで全て閉じる。

 


[2] Windowsサービスにcygserverを登録、等

[2-1] Baseの再構築(/bin/rebaseall -v)の実施

Vistaの場合、Base再構築を行うと、apache2が安定して起動できるようになる(ようだ。経験上)ので、最初に一回実行する。

手順の流れ:コマンドプロンプト --> ash シェル起動 -->/bin/rebaseall -v

注意点:rebaseallは、Cygwinシェルを全て閉じて、かつ、cygserverなどを全て停止した後、実行する。Cygwin関係のプロセスが動いている状態ではエラーで実行できない。cygserverサービスは、コントロールパネル等->[管理]サービスなどから「停止」しておくか、管理者権限で net stop cygserver と命令してサービス停止しておく。

[2-1-1] rebaseall の実行

(1) [スタート] 全てのプログラム --> アクセサリ --> コマンドプロンプト を実行

(2) ash シェルを起動する。起動できると、プロンプトが $ になる。

# c:¥cygwin¥bin¥ash.exe
$

(3) ash シェル内で、/bin/rebaseall を -v オプション付きで実行する。

$ /bin/rebaseall -v

-vオプション付きで実行すると、Baseの再構築の様子が表示される。

(4) 再構築が終わったら、コマンドプロンプト ウィンドウを閉じる。

 

[2-2] cygserverをWindowsサービスとして登録する(最初の一回だけ)

※注意! cygserverの登録には、Adminパッケージの追加インストールが必要です。

[2-2-1] cygserverの登録

(1) [Cygwinアイコン]右クリックメニュー --> [管理者として実行] で
Cygwinウィンドウを新たに開く。

(2) set を実行し、環境変数 CYGWIN='ntsec server' が反映されていることを確認する。

(3) cygserver-config コマンドを実行し、yes で答える。

$ cygserver-config

(4) net start cygserver コマンドを実行する。以下のメッセージが出たら起動成功。

$ net start cygserver
CYGWIN cygserver サービスを開始します。
CYGWIN cygserver サービスは正常に開始されました。

[2-2-2] cygserverがWindowsサービスに登録されているか確認

(5) 一旦、Windowsのユーザを [ログオフ] --> 再度 [ログイン] する。

(6) [コンピュータ]右クリックメニュー --> [管理] --> [コンピュータの管理]
  ウィンドウ を開く

(7) <サービスとアプリケーション> の左▲をクリックして一つ下の階層を表示
--> <サービス> をクリック

(8) 右側ウインドウで、CYGWIN cygserver サービスが [開始] [自動] となっていることを確認する。

(9) サービス ウィンドウは確認後閉じてもOK。

※これで、Windows起動時、自動的に cygserver サービスが起動される。

 


[3] Apache2 サーバ起動・停止のテスト

[3-1] Apache2 httpサーバの開始(必ず apachectl2 を使う!)

(1) Cygwinシェルを開いて、apachectl2コマンドを実行する。何もメッセージが表示されなければ、正常に起動している(かもしれない)。

$ /usr/sbin/apachectl2 -k start

(2) /var/run/httpd2.pid には、apache2デーモンの親プロセスIDが入っている。また、psコマンドで、現在実行中の(apache2を含む)プロセスを表示して、起動を確認できる。

$ cat /var/run/httpd2.pid
$ ps ax

(3) webブラウザで動作のチェック

適当なwebブラウザを使用して、以下のURLへ接続する。
It works ! などというシンプルなページが表示されれば、起動には成功している。

http://localhost/ あるいは http://127.0.0.1/

[3-2] Apache2 httpサーバの停止(必ず apachectl2 を使う!)

(1) 以下の、apachectl2コマンドを実行する。何もメッセージが表示されなければ、正しく停止している(かもしれない)。停止には10秒ほど要するようだ。psコマンドなどで apache2プロセスが無いことを確認しよう。

$ /usr/sbin/apachectl2 stop


[4] Apache2設定ファイルの修正

[4-1] httpd.conf :
  Servername , AddHandlerの調整、Include userdir.conf の有効化

Apache2 の設定ファイル /etc/apache2/httpd.conf を編集する。オリジナルのバックアップは .org としてコピーをとっておく。何か問題があって初期状態に戻したい場合には、これを使う。

コピーや編集する際には、エクスプローラ経由で c:\cygwin\etc\apache2\ ディレクトリに直接アクセス・エディタで編集しても可。

(1) ServerNameディレクティブ の設定(150行目付近)

(編集前)#ServerName www.example.com:80
      ↓
(編集後)ServerName localhost:80

・ServerNameディレクティブ のコメントアウト # を削除する
・ServerNameディレクティブ として localhost を記述する

(2) AddHandler .cgi .pl のCGI実行許可の設定(372行目付近)

(編集前)#AddHandler cgi-script .cgi
      ↓
(編集後)AddHandler cgi-script .cgi .pl

・Addhandlerディレクティブ のコメントアウト # を削除する
・cgi-script の指定として .cgi .pl の拡張子を指定する

(3) httpd-userdir.conf インクルードを有効化する設定(436行目付近)

(編集前)#Include /etc/apache2/extra/httpd-userdir.conf
      ↓
(編集後)Include /etc/apache2/extra/httpd-userdir.conf

・当該 Includeディレクティブ のコメントアウト # を削除する

[4-2] extra/httpd-userdir.conf :
  ~/public_html/のアクセス開放+CGI実行許可設定

Apache2 の ユーザホーム用 extra設定ファイル /etc/apache2/extra/httpd-userdir.confを編集する。オリジナルのバックアップは .org としてコピーをとっておく。何か問題があって初期状態に戻したい場合には、これを使う。

コピーや編集する際には、エクスプローラ経由で c:\cygwin\etc\apache2\extra\ ディレクトリに直接アクセス・エディタで編集しても可。

(1) /home/*/public_html/ の閲覧許可&CGI実行許可の設定(18行目付近)

(編集前)Options MultiViews ....... IncludesNoExec
      ↓
(編集後)Options MultiViews ....... Includes ExecCGI

・Options に ExecCGI を追加
・IncludesNoExec を Includes へ変更

 

[4-3] apachectl2 -t によって設定ファイルを検査した後、Apache2サーバを(再)起動

(1) Apache2 の 設定ファイル群のテストを行う。-t オプションを使う。

$ /usr/sbin/apachectl2 -t
Syntax OK

(2) 設定ファイルの変更を反映させるため、Apache2サーバ(再)起動

$ /usr/sbin/apachectl2 restart あるいは -k start
$ cat /var/run/httpd.pid
$ ps ax

 

[4-4] Windows上のwebブラウザで動作のチェック(ここからは各自のスキルにおいてお願いします。動かない場合は原因を各自で追求し、解決すること。演習におけるスキル基準の一部です。)

適当な~/public_html/index.html を設置する。

IE, Firefoxなど、適当なwebブラウザを使用して、以下のURLへ接続してホームへ接続できることを確認する。(username は Cygwinでのユーザ名。whoami で取得することができる)

http://localhost/~username/index.html
あるいは
http://127.0.0.1/~username/index.html

※注意点:各自のホームディレクトリのパーミッションは適宜設定する必要がある(かもしれない)。
例: chmod 755 ~/public_html

HTTPヘッダを出力し、キチンと動く、適切なCGIプログラム~/public_html/test.cgi を設置する。(例:HTTPヘッダ出力、空行挿入後、"Hello!"を出力するようなもの)

IE, Firefoxなど、適当なwebブラウザを使用して、以下のURLへ接続してCGIプログラムが実行できることを確認する。

http://localhost/~username/test.cgi
あるいは
http://127.0.0.1/~username/test.cgi

☆それでは演習がんばってください☆


[QandA] トラブル Q&A

[Q-1] /var/log/apache2/error_log への書き込み権限が無いと言われて、起動できません。

[A-1] おそらく、/var/log/apache2/ディレクトリ自体のオーナーは adminなどでしょうけれど、/var/log/apache2/error_log のオーナーは CygwinのWebパッケージをインストールした時のオーナー(個々の一般ユーザ)であると思います。従って、apachectrl2 で httpd2.exe を起動するユーザが、これらのログファイルへの書き込み権限を有している必要があります。

今回はローカルで実行するだけで、個々人しか管理しないので、
- apachectl2 実行ユーザ = 個々のユーザ
- /var/log/apache2/error_logなどの書き込み権限 = 個々のユーザ
としてOKです。(一般には、推奨しません)

ダメな場合は、以下で処置することは可能です(お勧めしません)

$ chmod 666 /var/log/apache2/*_log

 

[Q-2] 以下のようなメッセージが出て、Apacheサーバが起動できません。

$ /usr/sbin/apachectrl2 -k start
BAD System Call

[A-2] CYGWINシステム環境変数が正しくセットされていない、and/or cygserver
サービスが起動していないと、apache起動時に BAD System Call で落ちます。
システム環境変数の設定と、サービスへの登録を再度確認 and/or やりなおしてください。


[Q-3] 起動時、*.dll関係で fatal error となり、子プロセスが起動できない

$ 199 [main] httpd 5172 C:\cygwin\usr\sbin\httpd.exe: *** fatal error - unable to remap C:\cygwin\lib\apache\mod_vhost_alias.dll to same address as parent(0x2A0000) != 0x3A0000

[A-3] まちがって Apache 1.x系のスタートをしましたね(/usr/sbin/apachectl ) 。Vista上のCygwinでは、Apache 1.x 系はどうしても上記エラーで起動できない模様です。Apache 2.x系を使いましょう。

本当に Base パッケージ関連の *.dll の関連性がおかしくなる場合もあるようです。その場合には、このリンクにある手順で rebaseall を実行して Baseの再構築を行う必要があるようです(相当大変)。

 

[Q-4] 起動時、ServerNameが不正だと警告が出る

[Fri Jun ** 11:51:** 2009] [alert] httpd2: Could not determine the server's fully qualified domain name, using 160.252.***.*** for ServerName

[A-4] 環境によっては、ServerNameが取得できないので 警告がでます。
気にしない場合は放置しても構いません。/etc/apache2/httpd.conf の ServerName ディレクティブを以下のように設定することで警告は出ないようにすることができます。

 ServerName localhost:80

 

[Q-5] 起動時、TCP 80番ポートが使用中でエラーが出る

[A-5] 環境によっては、Skypeなど既にlocalhostで TCP 80番ポートを使用するアプリケーションがインストールされており、apacheが使用できない状態となっている場合があります。

TCP 80番ポートを使用しているアプリケーションを停止・削除する
そのアプリケーションが使用するポート番号を、80番以外へ移動する
Apache2サーバが 80番以外のポートをListenするように httpd.conf を調整する

などの対処方法があります。

 

[Q-6] apachectl2 によって httpd2 プロセスが起動できたように見えるが、実際にブラウザから localhost へアクセスしても長い時間待たされたあと「接続できません」と言われてしまう。

[A-6] Windows機の環境によっては、localhost が 127.0.0.1のIPアドレスにバインドされていない場合があるようです。すみませんが、その場合は、

http://127.0.0.1/

で接続してみてください。これでも接続できない場合、netstat -a コマンドで、

TCP 0.0.0.0:80 ****** Listen

と表示行があり、TCP80番ポートがapacheで開いていることを確認してください。これでも接続できない場合は、apache2パッケージのインストール時と、apache2.sh ポストインストールスクリプトの実行時にインストーラが失敗しており、以下のディレクトリに入っている各種設定ファイルのパーミッションが不正 (000) であるケースが確認されています。

/etc/apache2/httpd.conf
/etc/apache2/extra/*.conf

以下で処置することは可能です。しかし、この処置を行った後、完治する場合とそうでない場合が確認されています(原因不明です。すみません)

$ chmod 644 /etc/apache2/httpd.conf
$ chmod 644 /etc/apache2/extra/*.conf

完治しない場合、お手数ですが、Cygwin全体を再インストールして、手順を最初から実行してください。それでもダメな場合には、Windows nativeである Apache2 + ActivePerl を導入する回避策をとりますので,教員 or TA に相談してください。ーー>インストール手順はこちらから(検証作業中)

[Q-7] CYGSERVER が自動開始されるが、すぐに「停止」してしまう

[A-7] CYGSERVER初期登録時に、何らかのトラブルでサービスとして正常に登録が行われていません。以下の手順で、いったん CYGSERVER を抹消して、改めて管理者権限で再登録してください。なお、/etc/passwd, /etc/group が正しく設置できていない場合には、予めそれらのファイルを mkpasswd -l > /etc/passwd, mkgroup -l > /etc/group で設置しておいてください。

(1) 管理者権限で、CYGWINシェルを起動

(2) 以下のコマンドを入力し、サービスを抹消する

$ cygrunsrv --revome CYGSERVER

(3) ここでいったん、マシンを「再起動」する(再ログインではない)

(4) 再起動後、サービス一覧に、CYGSERVERのエントリが無いことを確認する

(5) ココの手順から、改めて作業を再開して、CYGSERVERサービスを登録してください

[Q-8] ~/public_html/下のコンテンツにアクセスできない。CGIが実行できず Internal Server Error が表示される

[A-8] 各人において、Apache2の設定と、ホームディレクトリ下でのCGIプログラムを実行可にする部分は、この授業・演習科目のクリアすべきスキル基準のひとつとなっています。つまり、Apache上でCGIを実行できるようにする設定が、演習の一部となっているということです。極めて困難な技術的な問題が発生しない限り、各人で努力して設定し、解決を試みてください。

ヒント:/var/log/apache2/error_log を見よ。

 

wasaki _AT_ cs.shinshu-u.ac.jp
Copyright(c) 2009 by Katsumi Wasaki. All rights reserved.