約 4 分で読めます。
またまたNextcloudのエラー解消系ネタ。
うちのNextcloudでは2要素認証にTwo-Factor TOTP Providerを使っているんですが、
ApacheからリバースプロキシありのNginxに引っ越したときに、こんな表示が出るようになり。
ストリクトモード:HTTP接続が許可されていません!
Chromeからのログイン時もSubmitボタンを2回押さないとログインできなくなってしまい。
2回押せばログインできるのでさほど困ってはいなかったのですが、
なんとなく嫌だったので直そうと。
NginxのログとかNginxのログを見たり、
Apacheで動かしているときとの違いを探したり、
リバースプロキシありのときとなしのときとでの動作の違いを探したり、
といろいろやってみましたが、
決め手となったのはこれでした。
Refused to send form data to ‘https://yasufumi-yokoyama.ml/nextcloud/index.php/login/challenge/totp’ because it violates the following Content Security Policy directive: “form-action ‘self'”.
クライアント側でセキュリティポリシーに引っかかっているので、リクエストをやめた、
みたいなエラーが出ていました。
ちなみにこのときはHTTPS通信自体をCancelした模様。
このエラーメッセージでググるとすぐに答えが。
config.phpに
'overwriteprotocol' => 'https',
を追加しろ、
とのことで、やってみたらあっさり解決。
問題発生のメカニズムとして、
Nextcloud自体はリバースプロキシの後ろで動いていてHTTPでの通信をしていた。 そのため、クライアントに返すNextcloud自体へのリンクもhttp://〜となっていた。 しかし、クライアントから見た場合、リバースプロキシとはHTTPSで通信していた。 そこにHTTPのリンクでリクエストすることになり、混合コンテンツ問題に引っかかった。
ということでしょう。
overwriteprotocolをhttpsにすることで、応答データに含まれるNextcloud自身へのリンクをhttpsに矯正することで、この問題を解消したってことですね。
参考:混合コンテンツ問題
終わりに
いかがでしたか。
原因が少しわかりにくく、解消に手こずったので、参考になれば!
Comments