2022年07月20日

Nextcloudが突然不調→解決した?

 「Nextcloud が突然不調」「同(つづき)」のさらに続きです。どうやら、Authorization: Basic .... という HTTP ヘッダが PHP から見えてない、というところまでわかったので、ロリポップのサポートに問い合わせてみた。下の通り、「それは仕様です、モジュール版で試してください」という回答が返ってきました。

現在のサーバーの仕様では個別にプロセスを処理する CGI版のPHPでは、セキュリティの観点より apacheサーバーから authorization header を 受け取れない状態となっております。

(中略)

お手数ではございますが、PHP8.1(モジュール版)へ変更していただき 問題が改善されるか様子を見ていただけますと幸いでございます。

 やってみました。ロリポップ・ユーザー専用ページの「PHP設定」のところで変更する。有効になるまで 5〜10分程度かかるそうです。

20220719-1.jpg

 デスクトップクライアントからアクセスしてみると、通りました! 久しぶりに見たよこの画面。

20220719-2.jpg

 もう一度全消去して、一からインストールし直した。前回とほぼ同じだが、データベースを設定してインストールする画面から、「推奨アプリをインストール」のチェックボックスが消えている。ここは単に「インストール」とする。

20220719-3.jpg

 アプリをインストールする画面はここで出てくる。ファイルを同期するだけなら、別に追加アプリはいらないので、今回は「キャンセル」して先に進みました。

20220719-4.jpg

 無事インストールできました。

20220719-5.jpg

 今回は、最初からサーバの設定をもう少し詰めておく。まず、右上のメニューから「設定」を開く。

20220719-6.jpg

 「管理/概要」を開くと、少しの間内部のチェックが行われて、設定に問題のある箇所が指摘される。

20220719-7.jpg

 1番目の「PHPのメモリ制限が推奨値の512MB以下です。」というエラーは、どうしようもない。ロリポップのライトプランの仕様だと、モジュール版はメモリ制限を変更できない。このエラーは無視する。2番目の「リバースプロキシヘッダーの構成が正しくないか、信頼できるプロキシからNextcloudにアクセスしています。そうでない場合、これはセキュリティに問題があり、攻撃者がNextcloudを表示できるようにIPアドレスを偽装することができます。詳細については、ドキュメント↗をご覧ください。」という警告については、config/config.php に以下の記述を書き加えて対処する。

  'trusted_proxies' =>
    array (
        0 => 'xxx.xxxxxxx.xxx', (Nextcloud をインストールしたサーバのアドレス)
    ),

 3番目の「Strict-Transport-Security "HTTP ヘッダーの秒数が少なくとも"15552000" に設定されていません。セキュリティを強化するには、セキュリティのヒント↗で説明されているようにHSTSを有効にすることをお勧めします。」という警告については、.htaccess に以下の記述を書き加えて対処する。

Header set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"

 次に、「管理/基本設定」で、「バックグラウンドジョブ」として Cron を選択。

20220719-8.jpg

 適当な場所に、以下の内容で nextcloud_cron.sh というファイルを作成し、実行属性をつけておく。-f のあとは、Nextcloud のインストールディレクトリ中の cron.php をフルパスで記述する。

#!/bin/sh
/usr/local/bin/php8.0 -f /home/users/2/xxxx.jp-xxxxxx/web/xxxxx/cron.php
/usr/local/php/8.1/bin/php -f /home/users/2/xxxx.jp-xxxxxx/web/xxxxx/cron.php

2023/11/3 追記:php 実行ファイルのパスは /usr/local/php/x.x/bin/php (x.x は php のバージョン) のようです。参考:「ロリポップ!レンタルサーバー > マニュアル > PHP設定」

 ロリポップの cron 設定で、「毎月・毎日・毎曜日・毎時・5分ごと」として、ファイルパスに上で作成したシェルスクリプトファイルを設定する。

20220719-9.jpg

 Cronジョブがうまく実行できれば、「バックグラウンドジョブ」の「最終ジョブ実行」に表示される。

20220719-10.jpg

 同期フォルダを設定してファイル転送してみた。全部で 16 GB の同期が、1時間半ぐらいで終了した。今回は途中でエラーは一度も出なかった。モジュール版の方が動作が安定しているようです。

 一応復旧したので、またしばらく使ってみます。

Posted at 2022年07月20日 23:20:03
email.png