さくらのレンタルサーバでの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 | |