Windows で Apache をサービスとして動かす

### Apache HTTP Server

# Windows で Apache をサービスとして動かす

Windows NT/2000 では Apache をサービスとして動かすことができます。(Apache 1.3.13 で、非常に実験的にWindows 95/98 においても同様の動作をサポートをするようになりました)。

サービスとして Apache をインストールするには、 コンソールウィンドウでたった一度この実行が成功できればいいはずです。 Apache をサービスとしてインストールしたり、動かそうとする前に Microsoft Windows で Apache を動かす を参照してください。httpd.conf ファイルへの変更はコンソールウィンドウで Apache を起動することにより、いつも反映されます。 これでうまくいけば、サービスは成功するでしょう。

注意: バージョン 1.3.13 より前ではインストール実行前に 設定はテストされません。サービスの依存性の不足が 原因で、コンソールウィンドウではしばしばうまくいきますが、 サービスはまだ失敗します。Apache の 1.3.13 より前のバージョンを 動かすときに問題があるならば、後述の説明 を参照してください。バージョン 1.3.13 以降でこの問題があるなら、 まず最初に Apache をアンインストール (-u) してから再インストール (-i) を試してみてください。 もっとよい手段は最新のバージョンにアップグレードすることです。

Apache をサービスとして開始するためには、まず最初にサービスとして インストールする必要があります。それぞれ別の名前と設定を使って、 Apache サービスを複数インストールすることができます。デフォルトの "Apache" という名前で Apache サービスをインストールするには、スタート メニューから "Install Apache as Service" オプションを実行してください。 これを一度行なえば、(コントロールパネル中の) サービスウィンドウ （Windows 2000では管理ツールの中にあります）を開いて、Apache を選択して、 次に Start をクリックすることで、"Apache" サービスを開始できます。 これで Apache はバックグラウンドで動きます。 その後は Stop をクリックすることで、Apache を終了できます。 サービスウィンドウを使う代わりに、コマンドラインから、 以下を実行することで、"Apache" サービスを開始、終了できます。

      NET START APACHE
      NET STOP APACHE

Apache サービスのインストールとコントロールに関するさらなる情報は、 Apache サービスのコントロールを参照してください。

Apache は、他の多くの Windows NT/2000 のサービスと異なり、 ほとんどのエラーは独自に Apache のサーバルートの logs フォルダにある error.log ファイルに記録します。ほとんどの Apache のエラーに関する 詳細はWindows NT のイベントログでは分からないでしょう。Apache を起動しようとしたときに発生したエラーだけがイベントログに記録されます。

Apache をサービスとして開始した後 (または、開始することに問題が あれば)、コンソールウィンドウから同じ手順 でテストできます。デフォルトのサービス設定を確認するためには、 このコマンド:

      apache -n "service name"

を使うことを覚えておいてください。

## Windows で Apache をサービスとして 動かす

注意: サービス名を指定する -n オプションは Apache 1.3.7 以降でのみ利用可能です。 以前のバージョンの Apache では、 デフォルトのサービス名 'Apache' だけがサポートされています。 バージョン 1.3.21 に限り、Windows 2000 でサービス名として表示される 名前の変更がサポートされています。

以下のようにすることで、Apache を Windows NT のサービスとして インストールできます:

        apache -i -n "service name"

特定の設定を使ってサービスをインストールするには、 インストールの際に設定ファイルを指定してください:

        apache -i -n "service name" -f "\my server\conf\my.conf"

サーバルートディレクトリをデフォルトから変更するための -d、 設定ファイルを変更するための -D, -C や -c など、その他の属性は 省略できます。これらがレジストリに書き込まれていて変更が困難なときは、 このコマンドを使ってオプションをクリアし、新しいオプションに置き換えます。

        apache -k config -n "service name" -f "\my server\conf\my.conf"

Apache サービスを削除するには、以下のようにします:

        apache -u -n "service name"

サービス名が指定されない場合のデフォルトの「サービス名」は "Apache" となります。

サービスがインストールされると、サービスの設定ファイルを示すのに 他のオプションと同時に `-n` オプションを使用することが できます。例:

サービスの設定ファイルをテストして、サービスのデフォルトの オプションを確認するには次のようにします（設定には -i, -k install, -k config オプションを使います) 例:

        apache -n "service name" -t

サービスの設定ファイルとデフォルトのオプションを使用して、 コンソールから Apache を起動するには次のようにします:

        apache -n "service name"

Apache リリース 1.3.15 で -k install オプションが -i オプションの、 また、-k uninstall オプションが -u オプションの別名として追加されました。 元の -i そして -u オプションは Apache 2.0 では使用しないようにしてください。 これらの別名は、両方のバージョンを運用する管理者が (訳注: Apache 2.0 に) 移行しやすくするために追加されました。

## サービスの依存に関する重要な留意点

リリース 1.3.13 以前の Apache では、インストールされたサービスが うまく開始することが前提条件となる依存関係は構成されません。 Apache の以前のバージョンを使用してサービスをインストールした後に、 以下の手順を踏まなければなりません :

        Run regedt32
        Select Window - "HKEY_LOCAL_MACHINE on Local Machine" from the menu
        Double-click to open the SYSTEM, then the CurrentControlSet keys
        Scroll down and click on the Apache servicename
        Select Edit - Add Value... from the menu
        Fill in the Add Value dialog with
            Value Name: DependOnGroup
            Data Type: REG_MULTI_SZ
            and click OK
        Leave the Multi-String Editor dialog empty and click OK
        Select Edit - Add Value... from the menu
        Fill in the Add Value dialog with
            Value Name: DependOnService
            Data Type: REG_MULTI_SZ
            and click OK
        Type the following list (one per line) in the Multi-String Editor dialog
            Tcpip
            Afd
            and click OK

また、サードパーティーのモジュール、ISAPI、その他 ActiveState Perl などによる、COM や DCOM の構成要素を使用しているならば、DependOnService リストに Rpcss のエントリーを追加する必要があるかもしれません。 それが不要な場合に、TCP ポート 135 を露出するのを避けるために、 Apache はインストールのときにそのエントリーを作成しません。 上の指示に従って、DependOnService 値を確認、または作成してください。 既に存在しているならばその値をダブルクリックして、Rpcss のエントリーを リストに追加してください。

依存性のためまだ他に何かインストールが要求されるかもしれません。 開始時にネットワークドライブ上に存在するファイルを要求される場合、 まず最初にネットワークリダイレクタ(通常 lanmanworkstation) の依存性に関わるサービスを設定して、" ユーザアカウントで Apache を動かす " セクション以下の説明に従ってください

IIS と Apache の両方を使おうとするなら、異なる IP アドレスの同じポート番号で W3SVC (IIS) を Apache の前に開始させておく必要があります。なぜなら、Apache が先に特定の IP アドレスで開始していると、IIS は開始するときに全ての IP アドレス (0.0.0.0) を確保しようとして失敗するからです。

Apache 1.3.21 で依存性を加えるはるかに単純な方法が導入されました。 -W "サービス名" 引数は Apache の依存性を設定する -k install や -k config コマンドに機能を付け加えます。複数の -W 引数が与えられますが、すべて -k オプションの後ろで指定するべきです。 例えば、インストール済みの "Apache" サービスに LanmanWorkstation 依存性を加えるなら、このコマンドを使います。

        apache -k config -n Apache -W LanmanWorkstation

## ユーザアカウントで Apache を動かす (NT/2000)

Apache が最初にサービス ( 例えば、-i オプション ) としてインストールされるとき、 "System" というユーザ (LocalSystem アカウント ) で動作するでしょう。 もし web サーバのすべてのリソースがローカルシステム上にあるなら ほとんど問題ありませんが、(LocalSystem アカウント ) はローカルマシンに 影響を与える幅広いセキュリティ特権を持っています。

> LocalSystem は局所的に非常に特権アカウントなので、 どんなシェアウェアアプリケーションもそこで動作させるべきでは ありません。しかしながら、それはネットワーク特権を持たなくて、 NT の機密保持機能、ファイルシステム、パイプ、DCOM 、セキュア RPC を含めて そのままにしておくことはできません

決してシステムアカウントにネットワーク特権を与えては いけません ! 代わりに新しいユーザアカウントを作成して、 そのユーザに適切な権限を与えて、'Log On As' というオプションを 使ってください。スタートメニュー -> 設定 -> コントロールパネル -> サービス -> Apache Service と選択して、「スタートアップ」 ボタンをクリックして、この設定にアクセスしてください。

> LocalSystem アカウントの環境で動作するサービスは SCM 関連のセキュリティ環境を引き継ぎます。 サービスはどのユーザアカウントとも関連づけられず、 また確認に使用されるべき証明 ( ドメイン名、ユーザ名、パスワード ) を持ちません。

SYSTEM アカウントはネットワークに特権を持たないので、共有されたページや 共有されたインストールはサービスからは見えません。 あなたがどんなネットワークリソースも使用するつもりであるならば、 以下のステップは役に立つかもしれません

- Control Panel の Service ダイアログから Apache を選択して、 Startup をクリックします。
- サービスアカウントが正しいことを確認してください。 Apache サービス用のアカウントを作成することもよい方法です。
- パスワードを繰り返し入力してパスワード確認をします。
- ドメインのユーザマネージャに行ってください。
- タイトルバーメニューから Policies をクリックして、 User Rights を選択してください。
- Advanced User Rights のオプションを選択してください。
- ドロップダウンリスト中で、選択されたアカウントに以下の権限が 与えられたことを確認してください。
  - Act as part of the operating system
  - Back up files and directories
  - Log on as a service
  - Restore files and directories
- 選択されたアカウントが Users グループのメンバであることを 確認してください。
- 選択されたアカウントがすべてのドキュメントとスクリプトディレクトリに アクセスする手段 (最低限読み込みとブラウズ) を持っていることを 確認してください。
- 選択されたアカウントが Apache logs ディレクトリに対して読み書き、 削除する手段を持っていることを確認してください。

そのアカウントでユーザとしてログインすることを許可したら、 自分自身でログインしてそのアカウントがスクリプトの実行、ウェブ ページの読み込みをする権限を持っていること、コンソールウィンドウから Apache を起動できることをテストすることができます。これがうまくいき、 上記のステップに従って手順を踏めば、Apache は問題なくサービスとして 実行するはずです。

注意: エラーコード 2186 はサーバが必要な ネットワークリソースにアクセスすることができないので 'Log On As' の設定を見直す必要がある、という指示です。

## Apache を Windows でサービスとして 動かすときの トラブルシューティング

サービスとして Apache を開始する場合、Windows サービスマネージャからの エラーメッセージを見ることになるかもしれません。例えばコントロールパネルの サービス アプレットを使用して Apache を開始させようとする時に、 以下のメッセージを見るかもしれません。

      Could not start the apache service on \\COMPUTER
      Error 1067; The process terminated unexpectedly.

Apache の開始において何らかの問題がある場合、このエラーに遭います。 問題の原因を確認するためには、コマンド プロンプトで Apache をテストするの指示に従ってください。

また、Apache 1.3.13 では Windows NT/2000 でサービスとして動かすとき、 開始時のエラーを アプリケーション ログ に記録します。イベント ビューア を起動し、Log ... Application と選択してイベントを確認することができます。

問題があった場合は、エラーが発生したことを警告のための エラーメッセージがポップアップされなくても、イベント ビューアで アプリケーション ログをチェックしてください。

## Windows でコマンドラインから Apache を動かす

コマンドラインから Apache サービスを制御することに関する詳細については、 コンソールコマンドラインの章を参照してください。

## サービスとしての Apache を制御する

Apache は複数インストールして、サービスとして動かすことができます。 インストールされた Apache サービスを開始、再開、終了、停止するには 以下のようにします:

        apache -n "service name" -k start
        apache -n "service name" -k restart
        apache -n "service name" -k shutdown
        apache -n "service name" -k stop

-n オプションのない -k コマンドはコンソールウィンドウで起動している Apache に向けられるので、デフォルトの "Apache" サービスでは -n Apache オプションが必要です。引用符はサービス名にスペースが含まれる場合に限り 必要になります。

注意: -k shutdown コマンドの別名の -k stop コマンドは Apache バージョン 1.3.13 で導入されました。 それより前のバージョンの Apache では -k shutdown オプションだけが認識されます。1.3.3 より前の Apache ではどんな -k オプションも認識されませんでした。

-D, -C, -c オプションを含めた apache -k start コマンドで起動時のオプションを指定することもできます。 これらはサービスの設定プロセスに影響します <IfDefine> ブロックで使うことで条件つきの指定をすることもできます。 サーバルートのパスや -d オプションや -f オプションを使って設定ファイルを上書きすることもできます。 これらのオプションは -k restart コマンドによっても読み込まれますが、 サービスの動作中には反映されず、サービスの起動時にのみ反映されます。

サービスは Windows NT/2000 の Service Control アプレットにも現れます。NT の場合、Settings -> Control Panel -> Services エントリ、2000 の場合、Settings -> Control Panel -> Administrative Tools -> Services エントリで参照できます。 そこから開始や終了させる Apache サービスを選択できます。 -D, -C, -c のような追加のオプションや、開始パラメータのデフォルトの -d や -f オプションの上書きは開始ボタンをクリックする前にしてください。 これらのオプションは apache -k start コマンドと全く同じように処理されます。

さらに、Apache サービスの開始、終了にネイティブの Windows NT/2000 の NET コマンドを使うこともできます:

        NET START "service name"
        NET STOP "service name"

繰り返しますが、サービス名がスペースを含む場合のみ、 引用符が必要になります。-D, -c, -C などの追加オプションを NET START コマンドで指定する方法はありません。 オプションが必要なときは、他の 2 種類のメソッドのどちらかを使用してください。

## 非常に実験的な Windows 95/98 サービス

注意: Windows 95 と 98 でのサービスオプションは Apache 1.3.13 以降でのみ有効です。以前のバージョンの Apache では Windows 95/98 においてはコンソールウィンドウでのみサポートされています。

Windows NT/2000 でのサービスと同じような Windows 95/98 上での Apache の動作をある程度サポートしています。 それは非常に実験的なもので、もし (すべて順調に) 動いたとしても Apache Software Foundation は、信頼性や将来のサポート は保証しません。以降については自分自身のリスクで進んでください!

Apache が Command Prompt で正常に動作することを確認したら、Windows NT/2000 の場合と同じコマンドでインストール、制御、 アンインストールすることができます。

ただし、注意すべき重要な違いがあります:

Apache は、起動が成功すると、バックグラウンドで動作します。 デスクトップのショートカットを通して、コマンド

       Apache -n "service name" -k start

を実行したら、例えば、サービスがうまく開始されれば、 コンソールウィンドウは表示されますがすぐに見えなくなります。 Apache が開始時に、httpd.conf ファイルにおける不正なエントリのようなエラーを見つけると、 コンソールウィンドウは表示されたままで残ります。 そこには問題の原因の追求に役に立つ エラーメッセージが表示されているでしょう。その際 Apache の logs ディレクトリにある error.log ファイルを調べ直すべきです。

Windows 95/98 では NET START や NET STOP コマンドを サポートしていないので、Command Prompt から Apache のService Control オプションを使用しなければなりません。これらのコマンド毎に ショートカットを用意し、スタートメニューやデスクトップから それをただ選ぶことで必要な動作を実行するようにするのはよい方法です。

Apache と Windows 95/98 は特定のユーザに対して、Apache サービスをネットワーク特権では提供しません。実際、Windows 95/98 はどんなセキュリティもローカルマシンに提供していません。 Apache Software Fondation がパブリックな httpd サーバとして Windows 95/98 の使用を決して認めないのは、これが単純な理由です。 これらは、web コンテンツの制作や Apache サーバの学習、 または安全なイントラネット上のサーバ、プライベートネットワークの ユーザを補助するために便宜上存在しているにすぎません。

### Apache HTTP Server