今まで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 = falseAH01071: 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を使用するようにスクリプト を修正する必要があります。







コメント