Ghostの設定でURLをHTTPSにするとリダイレクトループが発生する問題の解決法
はじめに
ぼくが愛用しているブログシステムであるGhost。実際に Noraworld Blog でもGhostを利用しています。
Ghostでは、config.js
を編集することで設定をいじることができます。url
という箇所に自分のURLを書いておくと、そのURLでGhostが使えるようになるわけですが、ここのURLにhttps://
ではなく、http://
と書いておくと、Ghostのブログ内のすべてのリンクがhttp://
で表示されます。
リンクがすべてhttp://
になっていても、Nginx側でリダイレクトするので結局はhttps://
でアクセスされるわけですが、せっかくHTTPSに対応しているのにリンクがすべてhttp://
になっちゃうのは気持ちが悪いし、Twitterのシェアもhttp://
とhttps://
が混在してしまったりしてすっきりしません。
そこで、config.js
のurl
をhttps://
にしたいのですが、なぜかhttps://
とするとリダイレクトループが発生してしまい、アクセスできないという問題が発生します。その解決法がわからずずっとhttp://
のまま利用していたのですが、今日やっとその解決法をネットで見つけたのでメモとして残しておきます。
Nginxの設定を追加
まさにビンゴな答えが紹介されているブログを発見しました。 How to setup HTTPS on your Ghost blog and avoid redirect loop
説明が英語ですが、やっていることはシンプルで、location
ディレクティブにproxy_set_header
を一行追加するだけです。
location / {
proxy_pass http://localhost:2368;
+ proxy_set_header X-Forwarded-Proto $scheme;
}
これによってGhostが正しいプロトコルの設定を認識できるようになるらしいです。
追加したら、Nginxを再起動します。
$ sudo nginx -s reload
Nginxを再起動するとリダイレクトループが発生しなくなり、リンクもすべてhttps://
で表示されるようになります。
Apacheの場合も上記のサイトで紹介されているので、そちらを参考にしてください。
ちなみにGhostのconfig.js
を編集したあとはNginx同様にGhostを再起動しないと設定が反映されないので忘れずに。