minimagickのgemを使って画像をアップロードすると、その画像が表示されるページのSSLマークが外れるという問題が発生したので、その時の解決方法を残します。
##このサイトで目にする画像は、悪意のあるユーザーによって差し替えられたものである可能性があります
###事象
・minimagickのgemを使って画像をアップロードすると、その画像が表示されるページでSSLマーク(鍵マーク)が外れ、びっくりマークに変わる
・びっくりマークをクリックすると「このサイトで目にする画像は、悪意のあるユーザーによって差し替えられたものである可能性があります」のメッセージがでる。
###解決方法
nginxのconfファイルにproxy_set_header X-Forwarded-Proto https;を追記
location @app {
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Server $hostname;
proxy_set_header X-Forwarded-Proto https; #この一行を追加
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect off;
proxy_pass http://app_server;
}
Nginx再起動
systemctl restart nginx
##解決までの流れ
###①画像ファイルへのリンクの確認
この事象はサイト内で使用している画像に、httpアクセスで記述している箇所があると発生するらしいので、デベロッパーツールで画像リンクのプロトコルを確認。
参考:https://stackdesign.jp/how-to-create-ssl-wordpress-site/
→きちんとhttpsになってた。
###②Railsの環境設定を変更
production.rbのconfig.force_ssl = trueを有効にすると、本番環境でSSL通信を強制できるので、コメントアウトを外し設定を有効にして再デプロイ。
参考:https://railsguides.jp/configuring.html
config.force_ssl = true
→ページにアクセスできなくなる
メッセージ
・このページは動作していません
・リダイレクトが繰り返し行われました。
→再びコメントアウト
###③nginxのconfファイル修正
HTTPSアクセスであることをX-Forwarded-ProtoでRailsへ通知することでリダイレクトのループを回避する。
参考:https://keruuweb.com/rails-nginx-https%E3%81%A7%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%82%92%E3%81%99%E3%82%8B/
location @app {
proxy_set_header X-Forwarded-Proto https; #この一行を追加
}
→無事に全ページでSSL化が有効になりました
##まとめ
「proxy_set_header X-Forwarded-Proto https;」はリダイレクトのループを回避するための設定で、本来はSSL化をする際に設定しておく必要があったらしい。
SSL化の際にきちんと設定ができていたら、そもそも今回のエラーは生じなかったってことですね、、、