Nginx
Nginx [engine x]は、HTTPおよびリバースプロキシサーバであり、Igor Sysoevによって作成されたメールプロキシサーバでもあります。 nginxプロジェクトは、高い同時実行性、高いパフォーマンス、低いメモリ使用量に重点を置いて開始されました。 2条項BSDライクライセンスの下でライセンスされており、Linux、BSDバリアント、Mac OS X、Solaris、AIX、HP-UX、およびその他の* nixフレーバーで動作します。また、Microsoft Windows用の概念実証ポートもあります。
以下は、Nginx構成に関するコミュニティ寄稿のドキュメントです。修正や追加は大歓迎です。
Nginx構成
PHP-FPM
Nginxは通常、php-fpmを介してPHPとインターフェイスするように構成されています。これは高速で堅牢です。
PHP-FPMのプールに対するデフォルトの動作は、通常、スクリプトの実行を特定の拡張子、つまり.phpに制限することです。この動作が特定のパッケージ/ディストリビューション内で構成されていることを確認する必要があります(debianなど)。
/etc/php5/fpm/pool.d/www.conf
security.limit_extensions = .php
Nginx
次の 'スラッシュ引数' 互換性のある 'location' ブロックをnginx構成のvhosts 'サーバ' に追加します('スラッシュ引数の使用' でさらに説明します)。
nginx.conf location:
location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_index index.php; fastcgi_pass 127.0.0.1:9000 (or your php-fpm socket); include fastcgi_params; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }
上記が機能しない場合は、以下を試してください。 注:これは、CentOS 7.6(1804)、MariaDB 10.3、Nginx 1.15、およびPHP7.3.5用でした。
location ~ ^(.+\.php)(.*)$ { root /usr/share/nginx/html/moodle/; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_index index.php; fastcgi_pass 127.0.0.1:9000; include /etc/nginx/mime.types; include fastcgi_params; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }
これが機能しない場合(スクリプト、スタイル、画像が読み込まれない) および ログにopen() "..." failed (20: Not a directory)
行が表示されている場合: このブロックの 前 に静的コンテンツに関連するディレクティブがあるかどうかを確認し、このブロックの 後 にそれらを移動してみてください。
もう1つの潜在的な落とし穴は、 try_files です。多くのガイドが次のような構成を推奨しています。
try_files $fastcgi_script_name =404;
ただし、try_filesが使用されている場合、nginxは $fastcgi_path_info 変数のコンテンツを削除します(これは意図された動作です)。これにより、 PATH_INFO も空になるため、スラッシュ引数は機能しません。 別の方法は、
if(!-f $document_root$fastcgi_script_name) {return 404;}
推奨、nginxドキュメントではifを使用しないも推奨されていますが、nginxドキュメントでは推奨されています。
XSendfile、別名X-Accel-Redirect
XSendfile機能を使用するようにMoodleとNginxを設定すると、PHPがファイルの配信から解放され、Nginxが最善を尽くす、つまりファイルを配信できるようになるため、大きなメリットがあります。
Moodles config.phpでNginxのxsendfileを有効にします。これはconfig-dist.phpに記載されており、最小限の構成は次のようになります。
$CFG->xsendfile = 'X-Accel-Redirect'; $CFG->xsendfilealiases = array( '/dataroot/' => $CFG->dataroot );
これに、nginxサーバ構成内の一致する 'location' ブロックを伴います。
location /dataroot/ { internal; alias <full_moodledata_path>; # ensure the path ends with / }
ここでの '内部' の定義は、クライアントがデータルートにアクセスできないようにするため、 重要です。
関連項目
- 実際のPATH_INFOサポート:
- [非推奨] HTTP GETfileパラメーターへ内部書き換え: