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.jsurlhttps://にしたいのですが、なぜか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を再起動しないと設定が反映されないので忘れずに。