今までUbuntuを使用してNGINX + php-fpmで各種サイトを運用していたのですが、
特に一部のWordPressプラグインとの相性が悪くApache2に移行しようと思い、
移行した後にNextcloudが不具合を起こしそれらを直すのに苦戦したので書き残します。
何が起きたのか
まずNGINXからApache2に移行した際にドキュメントルートを変えたせいで、
それらに起因するエラーが発生していたのでconfig/config.php
を変更しました。
その後にログインをしてダッシュボードを開くとおすすめファイルがや天気予報がくるくる回りっぱなしだったので、
開発者コンソールを見てみるとAPIの通信で403エラーが発生していたようでした。
直すまでの試行錯誤
Apache2のerror.log
を見てみると下記のようなエラーが記録されていました。
AH01071: Got error 'Access to the script 'redirect:/index.php/v1/heartbeat' has been denied (see security.limit_extensions)'
AH01071: Got error 'Access to the script 'redirect:/index.php/v2/notifications' has been denied (see security.limit_extensions)'
エラーの通りpool.d/www.conf
のsecurity.limit_extensions
を確認したところ、
コメントアウトされていたので下記のように拡張子を制限しないよう設定すると…
security.limit_extensions = false
AH01071: Got error 'Unable to open primary script: redirect:/index.php/v1/heartbeat (No such file or directory)'
AH01071: Got error 'Unable to open primary script: redirect:/index.php/v2/notifications (No such file or directory)'
なぜかファイルがないような判定をされていたようでした。
ついに直った!
数時間探しているとcgi.fix_pathinfo
が悪さをしているかもしれないという情報を手に入れ、
実際に下記のようにコメントアウトをしてみると…
;cgi.fix_pathinfo = 0
見事にダッシュボードのくるくる問題も改善しました!
何が原因だったのか
下記のPHPのリファレンスにも書いている通り、
PHP CGIのパスが正しく処理されないように設定したことが原因の様でした。
本来の
PATH_INFO
/PATH_TRANSLATED
サポートをCGIで提供します。 PHPの以前の動作は、SCRIPT_FILENAME
にPATH_TRANSLATED
を設定するというもので、PATH_INFO
の定義を理解していませんんでした。PATH_INFO
に関する詳細については、CGIの仕様を参照ください。 このオプションを1
にすることにより、 PHP CGIはこのパスを仕様にあうように修正します。 ゼロとすると、 PHPは以前と同様に動作します。これは、デフォルトでオンになっています。PATH_TRANSLATED
ではなく、SCRIPT_FILENAME
を使用するようにスクリプト を修正する必要があります。
コメント