Internet Information Services(IIS)は、Windows Serverおよび一部のクライアント版Windowsに付属しているウェブサーバソフトウェアです。なお、Apacheウェブサーバのほうがコミュニティのサポートがはるかに充実しており、通常、Apache上でMoodleを動作させるほうが問題は少なくなります。Windows OSは大規模なインストールには適していないため、代わりにLinuxまたはその他のUnix系オペレーティングシステムの使用を検討してください。
IISのインストール手順(Windows 11および一部の以前のバージョン)

- Windows 11でWindowsの「設定」を開きます。「コントロール パネル」を検索して、アプリを開きます。以前のバージョンのWindowsでは、このアプリは別の場所にある場合があります。
- コントロール パネルのウィンドウ右上で「プログラム」(Programs)を検索すると、「プログラムと機能」(Programs and Features)が見つかります。
- このオプションの下にある「Windows の機能の有効化または無効化」(Turn Windows features on or off)をクリックします。
- 「インターネット インフォメーション サービス」(Internet Information Services)にチェックを入れ、そのサブメニューで「インターネット インフォメーション サービス / World Wide Web サービス / アプリケーション開発機能 / CGI」(Internet Information Services / World Wide Web Services / Application Development Features / CGI)にもチェックを入れます。これは「+」をクリックしてメニューを展開すると表示されます。
- Windowsマシン上で新しいブラウザウィンドウを開き、「localhost」にアクセスすると、IISのウェルカム画面が表示されます。
注: Microsoft Web Platform Installerは、Microsoftによるサポートが終了しています。
PHPのインストール
上述のとおり、公式のMS Platformインストーラは提供が終了しており、サポートされていません。次の手順に従って手動でインストールしてください:
- 現在のMoodleバージョンでサポートされている最新バージョンのPHP Non Thread Safeをhttp://windows.php.net/download/からダウンロードします。Moodle 4.5では、PHP 8.1.0以上が必要です。
- Zipファイルを C:\PHP\ などのディレクトリに展開します。
- Visual Studio 2015-2022用Visual C++再頒布可能パッケージの適切なバージョン(x64版またはx86版)をダウンロードしてインストールします。このソフトウェアのインストール後、コンピュータの再起動が必要な場合があります。
FastCGIハンドラの登録

- 「インターネット インフォメーション サービス (IIS) マネージャー」(Internet Information Service (IIS) Manager)を開きます。Windowsのタスクバーで検索アイコンをクリックし、検索バーに「Internet Information Service」と入力すると見つかります。
- 「ハンドラー マッピング」(Handler Mappings)アイコンをダブルクリックします。
- ウィンドウ右側の「操作」(Actions)パネルで、一覧から「モジュール マップの追加...」(Add Module Mapping...)を選択します。
次のように設定を入力します:
- 「要求パス」(Request path):すべてのPHPファイルを処理するため、*.phpと入力します。
- 「モジュール」(Module):ドロップダウンからFastCgiModuleを選択します。
- 「実行可能ファイル」(Executable):展開したPHPディレクトリ内のphp-cgi.exeファイルを指定します。例:「C:\PHP\php-cgi.exe」。
- 「名前」(Name):「名前」ボックスに、ハンドラマッピングの一意の名前を入力します。例:「PHP-FastCGI」。
- 「要求の制限」(Request Restrictions)をクリックします。
- 「要求が次にマップされている場合のみハンドラーを呼び出す」(Invoke handler only if request is mapped to)を選択します。
- 「ファイルまたはフォルダー」(File or Folder)オプションをクリックして選択します。
- 「OK」をクリックして制限を保存します。
- 「OK」をクリックしてハンドラの設定を保存します。
- 「モジュール マップの追加」(Add Module Mapping)ダイアログボックスでFastCGIアプリケーションの作成を求められた場合は、「はい」(Yes)をクリックします。
保存後、戻ってFastCGIアプリケーションを「編集」(Edit)し、「アクティビティ タイムアウト」(Activity timeout)を1時間以上に増やします。これにより、時間のかかる処理の途中でMoodleのスクリプトが失敗することを防げます。
PHPの設定手順
- 作成したPHPディレクトリでphp.ini-productionファイルを見つけ、同じフォルダにphp.iniとしてコピーします。
- コピーしたphp.iniファイルを(メモ帳または好みのエディタで)編集し、次の変更を加えます:
- php.iniで、行頭の;を削除して次の拡張モジュールを有効にします。
- curl拡張モジュールのコメントを解除します。
- fileinfo拡張モジュールのコメントを解除します。
- gd拡張モジュールのコメントを解除します。
- intl拡張モジュールのコメントを解除します。
- mbstring拡張モジュールのコメントを解除します。
- exif拡張モジュールのコメントを解除します。
- mysqli拡張モジュールのコメントを解除します。データベースがMySQLの場合に使用します。
- openssl拡張モジュールのコメントを解除します。
- pgsql拡張モジュールのコメントを解除します。データベースがPostgreSQLの場合に使用します。
- soap拡張モジュールのコメントを解除します。
- sodium拡張モジュールのコメントを解除します。
- zend_extension=opcache行のコメントを解除します。
- cgi.force_redirect = 0のコメントを解除し、値が0であることを確認します。
- fastcgi.impersonate = 1のコメントを解除し、値が1であることを確認します。
- max_input_vars = 1000行のコメントを解除し、値をMoodleで必要とされる5000以上に変更します。
- PHP.iniでdate.timezoneを設定します。参考としてPHPでサポートされるタイムゾーンのリストを使用してください。
- PHP.iniで適切なメモリ制限とタイムアウトを設定します。
IISの設定手順
- 後述のURL書き換えを設定します。
- 詳細なエラーページを表示するようにIISを設定します。
- CGIタイムアウトを非常に長く設定します(1時間、できればそれ以上)。
- IISマネージャで、Moodleのdirrootディレクトリを新しい仮想ディレクトリとして追加するか、サイトディレクトリとして設定します。
既定のドキュメント
- 「index.php」を既定のドキュメント(Default document)として必ず追加してください。
Slasharguments
スラッシュ引数の使用で説明しているように、Moodleのさまざまな機能が正しく動作するには、スラッシュ引数機能が必要です。
IIS 7は、デフォルトで相対パス引数をサポートしているはずです。動作しない場合は、php.iniで次の設定を有効にしてみてください:
cgi.fix_pathinfo = 1
URL書き換え

IISの一部のバージョンでは、Rewriteモジュールがデフォルトで含まれていません。使用しているWindowsのバージョンに応じてx86版またはx64版をダウンロードし、インストールしてください。モジュールを表示するには、IISを再起動してIISマネージャを開き直す必要がある場合があります。
Moodleでユニコードのファイル名をサポートし、YUIファイルの配信を妨げる内部的なファイル長の制限を回避するため、次の書き換えルールを追加します:
- 「空の規則」(Blank rule)を使用して新しい規則を追加します。
- 規則に名前を付けます。例:Moodle rewrite。
- パターンに一致する(Matches the Pattern) - 正規表現(Regular Expressions) -
^([^\?]+?\.php)(\/.+)$ - 操作(Action) - 書き換え(Rewrite) -
{R:1}\?file={R:2} - クエリ文字列を追加する(Append query string) - 有効
- 後続の規則の処理を停止する(Stop processing of subsequent rules) - 有効
右側のパネルで「適用」(Apply)をクリックし、規則を保存して適用します。
UTF-8ファイル名の修正(オプション)
デフォルトでは、IISはMoodleにアップロードされたファイルのユニコード文字を処理できません。その結果、MoodleサイトでJavaScriptが動作しなくなったり(ナビゲーションを展開できないなど)、CSSスタイルが崩れたりすることがあります。
Using UTF-8 Encoding for Server VariablesおよびHow to get UTF-8 Encoding support in IIS 7.5 in Windows 7 and Windows Server 2008 R2 with the KB 2277918 hotfixを参照してください。
次のコマンドを実行します:
reg add HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\w3svc\Parameters /v FastCGIUtf8ServerVariables /t REG_MULTI_SZ /d REQUEST_URI\0PATH_INFO
CGIタイムアウト
デフォルトでは、IISはPHPスクリプトが5分間動作するとその実行を停止するように設定されており、アップグレードやcronなど、長時間実行されるMoodleのスクリプトの妨げになります。タイムアウトは少なくとも1時間に増やす必要があります。
ディレクトリのパーミッション
IISのデフォルトのアカウントはIIS_IUSRSです。このアカウントがMoodleのdirrootディレクトリ(読み取り専用)およびdatarootディレクトリ(読み取り/書き込み)に対して適切なアクセス権を持っていることを確認してください。
40xエラーの処理
これにより、存在しないファイルのエラーページにMoodleのテーマを適用できます。
1. 「インターネット インフォメーション サービス (IIS) マネージャー」(Internet Information Services (IIS) Manager)タブを開きます。これは、タスクバーの「サーバー マネージャー」(Server Manager)の下、さらに「ツール」(Tools)の下にあります。
2. Moodleのウェブサイトを特定します。「接続」(Connections)ペインに移動し、サーバ名の横にあるプラス記号(+)をクリックして展開します。次に「サイト」(Sites)を展開します。その後、Moodleのウェブサイトに移動します。
3. エラーページを開きます。ホームペインにある「エラー ページ」(Error Pages)アイコンをダブルクリックし、「編集」(Edit)をクリックします。
4. HTTPステータスコードを入力します。「カスタム エラー ページの編集」(Edit Custom Error Page)ダイアログボックスが表示されたら、「状態コード」(Status Code)の下に「404」と入力します。
5. 「このサイトで URL を実行する」を選択します。同じダイアログボックスで「このサイトで URL を実行する」(Execute a URL on this site)を選択して、カスタムページを提供できるようにします。
6. URLを入力します。「URL (サイト ルートからの相対パス)」(URL (relative to the site root))テキストボックスに「/error/index.php」と入力し、「OK」をクリックします。
7. 「機能設定の編集」を選択します。「OK」を押したら、404エラーを右クリックして「機能設定の編集」(Edit Feature Settings)を選択します。
8. 「カスタム エラー ページ」(Custom Error Page)を選択し、「OK」をクリックします。この最後の「OK」をクリックすると、新しいページが有効になり、使用できる状態になります。
オプション(セキュリティ強化)
上記と同じ手順を403エラーについても繰り返し、「/error/index.php?code=404」にリダイレクトできます。
これにより、IISからの403はすべて同じページに送られますが、セキュリティ向上のため、HTTPステータスも404で上書きされます。
内部パスの秘匿
IISにはURL Rewriteモジュールが含まれています。この拡張モジュールを使用して、受信したURLリクエストを書き換えるための規則をIISに設定できます。
Moodleや他の多くのPHPアプリケーションは現在、.htaccessファイルの一部として書き換えルールを同梱しています。これらの規則は、受信したリクエストをいつどのように書き換えるかをApacheのmod_rewriteに指示します。IIS URL Rewriteモジュールは、これらの規則を読み込んでURL Rewriteの規則に変換できます。
RewriteEngine On RewriteRule "(\/vendor\/)" - [F] RewriteRule "(\/node_modules\/)" - [F] RewriteRule "(^|/)\.(?!well-known\/)" - [F] RewriteRule "(composer\.json)" - [F] RewriteRule "(\.lock)" - [F] RewriteRule "(\/environment.xml)" - [F] Options -Indexes RewriteRule "(\/install.xml)" - [F] RewriteRule "(\/README)" - [F] RewriteRule "(\/readme)" - [F] RewriteRule "(\/moodle_readme)" - [F] RewriteRule "(\/upgrade\.txt)" - [F] RewriteRule "(phpunit\.xml\.dist)" - [F] RewriteRule "(\/tests\/behat\/)" - [F] RewriteRule "(\/fixtures\/)" - [F]
これらの規則をIIS URL Rewrite固有の形式に変換するには:
1. IISマネージャを起動します。
2. 左側の「接続」(Connections)ペインで「Default Web Site」を選択します。
3. 右側の「機能ビュー」(Features View)で「URL 書き換え」(URL Rewrite)をクリックします。
4. 右側の「操作」(Actions)ペインで「規則のインポート」(Import Rules)をクリックします。
5. 上記のmod_rewriteルールの例をコピーし、「書き換え規則」(Rewrite rules)テキストボックスに貼り付けます。
6. 「変換された規則」(Converted Rules)ボックスの「ツリー ビュー」(Tree View)タブに、変換の結果がすぐに表示されます。また、「XML ビュー」(XML View)タブをクリックすると、規則がWeb.configファイルにどのように保存されるかを確認できます。
詳細については、次のリンクを参照してください: https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/importing-apache-modrewrite-rules
問題のデバッグ
デフォルトでは、IISは本番サイトでエラーの詳細を意図的に隠すカスタムエラーページを使用します:

しかし、Moodleの問題を診断する場合には、これはあまり役に立ちません。IISのこれらのデフォルトのエラーメッセージを一時的に無効にして、Moodleの具体的なエラーメッセージが表示されるようにできます。そのためには、MoodleサイトについてIISのカスタムエラーページの「existingResponse」設定を「PassThrough」に設定します。その結果、問題が発生したときに、Moodleがエラーについてより具体的なメッセージを表示するようになります:

通常は問題の詳細を何も示さない、IISの一般的な「404」エラーメッセージは表示されなくなります。
デバッグメッセージが表示されるように、設定 > サイト管理 > 開発 > デバッグのデバッグオプションも有効にする必要があります。