Nextcloudで「ストリクトモード:HTTP接続が許可されていません!」と表示されたときの対処方法

nextcloud

約 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した模様。



このエラーメッセージでググるとすぐに答えが。

How to fix Nextcloud Refused to send form data to /login/v2/grant because it violates the following Content Security Policy directive: form-action 'self' - TechOverflow
Problem: When trying to connect using the Nextcloud client, during the Flow v2 authorization step where you open a page ...



config.phpに

'overwriteprotocol' => 'https',

を追加しろ、
とのことで、やってみたらあっさり解決。

問題発生のメカニズムとして、

Nextcloud自体はリバースプロキシの後ろで動いていてHTTPでの通信をしていた。
そのため、クライアントに返すNextcloud自体へのリンクもhttp://〜となっていた。

しかし、クライアントから見た場合、リバースプロキシとはHTTPSで通信していた。

そこにHTTPのリンクでリクエストすることになり、混合コンテンツ問題に引っかかった。

ということでしょう。

overwriteprotocolをhttpsにすることで、応答データに含まれるNextcloud自身へのリンクをhttpsに矯正することで、この問題を解消したってことですね。

参考:混合コンテンツ問題

終わりに

いかがでしたか。

原因が少しわかりにくく、解消に手こずったので、参考になれば!

この記事を書いた人

組込ソフト歴15年の外資系エンジニア。
前職で組込Linuxを使った商品設計/品質確保の業務に従事。
Raspberry Piが好き。
株式投資で年50万円を稼ぐ。
妻は香港人(国際結婚)。

Please follow me
nextcloud
Please follow me

Comments

タイトルとURLをコピーしました