Apache
このページは更新が必要です。 更新を行い、完了したらこのテンプレートを削除してください。
この記事は「Apache HTTPサーバ」を対象としています
Apache HTTPサーバは、(PHPスクリプト言語とともに)Moodleを「動かす」ソフトウェアです。なお、代替となるもの(たとえば、Windows上のIIS、LinuxやMacOS上のNginx)もありますが、Apache HTTPサーバはすべてのプラットフォームで非常によく使われています。
Apacheのインストール
ほとんどのプラットフォーム向けのインストーラを http://httpd.apache.org/download.cgi から入手できます。公式のインストール手順はこちらです:http://httpd.apache.org/docs/2.0/install.html 。Linuxを使用している場合は、可能であればパッケージ版を使用することをお勧めします。たとえば、Debian/Ubuntuでは次のコマンドを実行するだけです:
sudo apt-get install apache2
手順については、使用しているプラットフォームのドキュメントを参照してください。必要であれば、Apacheはソースから簡単にビルドできます。また、PHPのドキュメントには、ApacheとPHPを一緒にビルドする方法についての記事があります。ただし、そうする必要があることはほとんどありません。
パフォーマンス
パフォーマンスの推奨事項を参照してください。
ルーティング
Moodle 4.5以降、Moodleにはルーティングエンジンが含まれています。リクエストを処理するには、FallbackResourceディレクティブを使用して設定する必要があります:
DocumentRoot /var/www/moodle/public
<Directory /var/www/moodle/public>
AllowOverride None
Require all granted
FallbackResource /r.php
</Directory>
FallbackResourceは、サイトのルートからの相対パスです。
/var/www/moodle/public)に設定する必要があります。詳細は再構成ガイドを参照してください。
Slasharguments
スラッシュ引数の使用で説明しているように、Moodleのさまざまな機能が正しく動作するには、スラッシュ引数機能が必要です。
有効にするには、httpd.conf、またはローカルディレクトリの.htaccessファイルに次の行を追加します:
AcceptPathInfo On
注: ローカルのMoodleインストールフォルダで「.htaccess」を使用する場合は、まず「httpd.conf」で「AllowOverrideディレクティブ」を追加または有効にする必要がある場合があります。
注: .htaccessファイルを使用すると、サーバのパフォーマンスが低下します!
Ionos(旧1&1)の共有ウェブホスティングを使用している場合、上記の方法は機能しません。PHPをCGIとして使用する場合の既知のバグがあるためです。解決策は、moodleディレクトリに次の内容のphp.iniファイルを作成することです:
cgi.fix_pathinfo = 0
また、Ionosでは、スクリプトが実行されるすべてのディレクトリにこのphp.iniが存在する必要があります。次の手順を使用して、すべてのサブディレクトリのphp.iniから元のphp.iniファイルへのリンクを作成してください。
cd your_moodle_directory
find -type d -exec ln -s $PWD/php.ini {}/php.ini \;
これは、他の共有ホスティング業者にも当てはまる場合があります。
40xエラーの処理
これにより、存在しないファイルのエラーページにMoodleのテーマを適用できます。
ErrorDocument 404 /error/index.php # This sends any 403 from apache through to the same page, but also # overrides the http status with 404 instead for better security. ErrorDocument 403 /error/index.php?code=404
内部パスの秘匿
mod_rewriteを有効にして(Ubuntuでは必須)、Apacheを再起動します。
sudo a2enmod rewrite
sudo systemctl restart apache2
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 "(\/UPGRADING\.md)" - [F] RewriteRule "(phpunit\.xml\.dist)" - [F] RewriteRule "(\/tests\/behat\/)" - [F] RewriteRule "(\/fixtures\/)" - [F] RewriteRule "(\/upgrade\.txt|UPGRADING\.md|UPGRADING\-CURRENT\.md)" - [F]
注: 上記のルールによって、必要なコンテンツ(たとえば「vendor」ディレクトリを含むSCORMパッケージ)の読み込みがブロックされる場合があることに注意してください。
上記のApacheのルールはセキュリティ上は問題ありませんが、report/security checks/[すべての公開およびプライベートパスをチェックする]のMoodleのチェックに準拠したい場合は、次のルールを使用すると、403([F])の代わりに404が返されます。
RewriteEngine On
RewriteRule "(\/vendor\/)" - [L,R=404]
RewriteRule "(\/node_modules\/)" - [L,R=404]
RewriteRule "(^|/)\.(?!well-known\/)" - [L,R=404]
RewriteRule "(composer\.json)" - [L,R=404]
RewriteRule "(\.lock)" - [L,R=404]
RewriteRule "(\/environment.xml)" - [L,R=404]
RewriteRule "(\/lib\/classes)" - [L,R=404]
RewriteRule "(\/install.xml)" - [L,R=404]
RewriteRule "(\/README)" - [L,R=404]
RewriteRule "(\/readme)" - [L,R=404]
RewriteRule "(\/moodle_readme)" - [L,R=404]
RewriteRule "(\/upgrade\.txt)" - [L,R=404]
RewriteRule "(phpunit\.xml\.dist)" - [L,R=404]
RewriteRule "(\/tests\/behat\/)" - [L,R=404]
RewriteRule "(\/fixtures\/)" - [L,R=404]
RewriteRule "(\/upgrade\.txt|UPGRADING\.md|UPGRADING\-CURRENT\.md)" - [L,R=404]
また、メインディレクトリのOptionsルールでIndexesを定義しないようにしてください。
SSL
Moodleには、サイト全体、またはログインページのみでHTTPSを有効にするオプションがあります。いずれのオプションでも、ウェブサーバがSSL用に設定されている必要があります。
- サイト全体のHTTPSは、config.phpの「wwwroot」パラメータでhttp://<url>をhttps:// <url>に変更することで有効になります。
- ログインのみのHTTPSは、「loginhttps」パラメータを設定することで有効になります。この場合、wwwrootのスキーマはhttp://のままにします。
注:ログインのみのhttpsは非推奨となり、Moodle 3.4で削除されました:https://tracker.moodle.org/browse/MDL-42834
Moodle 3.3以前では、管理画面の管理 > セキュリティ > HTTPセキュリティでボタンにチェックを入れることで、ログインのみのhttpsを利用できます。(警告に注意し、下記のSSLセクションを参照してください。)
Moodle 2.3より前では、クライアント側のキャッシュに関する従来の制限のため、サイト全体をHTTPSで運用することは推奨されていませんでした。クライアントのブラウザが「Cache-Control: public」方式をサポートしていれば、現在はそのようなことはありません。このバージョンのMoodleでサポートされているすべてのブラウザは、この方式をサポートしています。
HTTPSを使用するには、SSL証明書を入手する必要があります。方法は2つあります:
- 自己署名証明書を生成します。これは(たとえば)イントラネットでは問題ありませんが、公開インターネットには適していません。公開して使用すると、証明書が信頼されていないという警告がユーザに表示されます。
- ベンダから証明書を購入します。価格や付加価値サービスは驚くほど多様です。無料の証明書を提供しているホスティング業者もあります。
Debianは、同プロジェクトのwikiで自己署名証明書をインストールする手順を提供しており、SSL用のApacheの設定に関する一般的な情報も掲載しています。 ベンダの証明書を購入した場合は、通常、そのインストール手順が提供されます。
Apacheの基本的なSSL設定は、次のようにまとめられます:
Listen 443
NameVirtualHost *:443
<VirtualHost *:443>
SSLEngine On
SSLCertificateFile /path/to/your/certificate.crt
SSLCertificateKeyFile /path/to/your/certificate.key
...
</VirtualHost>
ロードバランサのヒント(AWS)
インフラストラクチャの前段でAWSのロードバランサを使用している場合は、上記の設定の一部をロードバランサで行い、トラフィックがその先に転送されないようにできます。以下は、ファイルを隠すために適用した設定です。既知の制限により、いくつか考慮すべき点があります:
- Application Load Balancerあたりのルールは合計100個まで
- ルールあたりの条件値は5個まで
- ルールあたりのワイルドカードは5個まで
- ルールあたりの重み付きターゲットグループは5個まで:
[
{
"Conditions": [
{
"Field": "path-pattern",
"Values": [
"*/.*",
"*/upgrade.txt",
"*/db/install.xml",
"*/README.md"
],
"PathPatternConfig": {
"Values": [
"*/.*",
"*/upgrade.txt",
"*/db/install.xml",
"*/README.md"
]
}
}
],
"Actions": [
{
"Type": "fixed-response",
"Order": 1,
"FixedResponseConfig": {
"ContentType": "text/html",
"MessageBody": "<html>\n<head><title>404 Not Found</title></head>\n<body>\n<center><h1>404 Not Found</h1></center>\n<hr>\n</body>\n</html>",
"StatusCode": "404"
}
}
]
},
{
"Conditions": [
{
"Field": "path-pattern",
"Values": [
"*/composer.json",
"*/Gruntfile.js",
"*.lock",
"*/environtment.xml",
"*/readme.txt"
],
"PathPatternConfig": {
"Values": [
"*/composer.json",
"*/Gruntfile.js",
"*.lock",
"*/environtment.xml",
"*/readme.txt"
]
}
}
],
"Actions": [ #### Same as above
...
]
},
{
"Conditions": [
{
"Field": "path-pattern",
"Values": [
"*/fixtures/*",
"*/behat/*",
"*/phpunit.xml"
],
"PathPatternConfig": {
"Values": [
"*/fixtures/*",
"*/behat/*",
"*/phpunit.xml"
]
}
}
],
"Actions": [ #### Same as above
...
]
}
]