お久しぶりです。阿部です。
【2020/12/14】これまで動いていた社内のシステムにChromeがセキュリティ警告を出すようになってしまいました。
同僚に聞いてみても、再現するPCと再現しないPCがあり、???状態
そういえば、朝起動時に随分待たされたことを思い出しました。
WindowsUpdate? Chromeのバージョンアップ(87.0.4280.88)? ? が原因のようです。
画面を表示させることはできるのですが、POST
処理が実行されるような処理でのみ発生します。
- ログイン画面でのログイン時
- 記事の編集/登録時
ちなみに、左下の「このまま送信」をクリックすると問題なく動作します。
開発者ツールで見てみるとこんなエラーが
strict-origin-when-cross-origin で調べてみると、プロトコルhttp
/https
が混在しているような場合に起こるようでした。
※興味のある方は調べてみてください。捕捉があれば是非コメントをお願いします。
システムはWebサーバにnginx、Webアプリケーションサーバにunicornを積んだ一般的なRailsのWebサーバ構成となっています。
細かいことはよくわかっていないこともあるので、今の段階でわかっている結論だけ書きます。
原因)
事象)
- Railsが認識しているプロトコルが
http
なので、redirect_toのあて先がhttp:
となっている - リクエストヘッダーは
https
なのに、レスポンスヘッダーでhttp
プロトコルでリダイレクトされる https
でリクエストしたのに、http
へのリダイレクトを要求されたため警告表示
対応) nginxの設定ファイル
- /etc/nginx/nginx.conf (yumでインストールした場合のデフォルト)
- /etc/nginx/con.d/xxxx.conf
のいずれかに以下のような記述があると思います。
location @app { proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; #proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto; proxy_connect_timeout 60; proxy_read_timeout 60; proxy_send_timeout 600; proxy_pass http://localhost:3000; #ここは http://backend のようにsocket通信を指定している場合もあると思います。 }
ここに以下の記述を追加します。
proxy_set_header X-Forwarded-Proto "https";
実行してみると 警告は
・・・・・・・・・・
・・・・・・・・・・
・・・・・・・・・・
・・・・・・・・・・
・・・・・・・・・・
出ません!!!
開発者ツールを見てみると
- nginxからRailsにアクセスする際にヘッダー情報にプロトコルが
https
であることをセットする - Railsが認識するプロトコルが
https
となる - RailsがリダイレクトするURLのプロトコルがhttpsとなる
- httpsでリクエストしたのに、
https
へのリダイレクトのため問題なし
と動いたと・・思っていますが、真偽のほどは・・・
qiita.com この記事に非常に助けてもらいました。
数年運用していたシステムでリダイレクトの設定でプロトコル異常が起こっていたのは悲しいところではありますが、 何とか当日に対応できてよかったです。
同じ悩みでお困りの方の参考になれば幸いです。