さくらのレンタルサーバでのhttps強制とベーシック認証
普段はheorkuを触っている事が多いのだが、今回はさくらのレンタルサーバを使用することになり、その環境でのhttps強制を設定しようとしたところ、リダイレクトループでハマったのでメモ。
通常のリダイレクト
どうやらさくらのサーバはかなりクセの強いことで有名らしく、以下のような普通の?https強制のコードだとリダイレクトループとなってしまう。
1 2 3 |
|
ロードバランサのリダイレクト
ロードバランサを使っている場合はHTTPS
がon
にならないため、ずっとoffの状態になりリダイレクトループが起こる。
よって、以下のように書く。
1 2 3 |
|
さくらのリダイレクト
しかしさくらの場合は特殊なようで、以下ような挙動になっているよう。
%{SERVER_PORT}
には常に80
が設定されている- SSLアクセス時には、
%{ENV:HTTPS}
にはON
、%{HTTP:X-Sakura-Forwarded-For}
にはリクエスト元のIPが設定される
よってhttpsでない判定の場合は、%{ENV:HTTPS}
がonではない、%{HTTP:X-Sakura-Forwarded-For}
は空、の場合はリダイレクト、という判定にすればよいよう。
よって以下となる。
1 2 3 4 |
|
ベーシック認証
ベーシックをかける際に、そのままベタで書いてしまうとhttpsへリダイレクトさせている関係上、httpでベーシック認証、httpsでベーシック認証、と2回聞かれることになってしまう。
これをhttpsでのアクセス時にのみ有効としたいので、上記のさくらサーバの特性を活かして、%{HTTP:X-Sakura-Forwarded-For}
が空でない場合にのみ、ベーシックを有効とするようにした。
(%{ENV:HTTPS}
は、ケースによってはon
にならない場合もあるよう)
1 2 3 4 5 6 |
|