2012年03月18日に投稿

[PHP] https で表示しているページでも $_SERVER[‘HTTPS’] が on にならない

SSL を使っているページにいいねボタンやツイートボタンを設置すると警告が表示されてしまいます。そこで https 接続を行うページだけ違った処理をするために、PHP から http 接続なのか https 接続なのか判別したい時がありました。

通常、PHP のスーパーグローバル変数である $_SERVER[‘HTTPS’] の値が on になっていれば、https 接続であるという判断ができると思っていたのですが、あるレンタルサーバーでは https 接続なのに $_SERVER[‘HTTPS’] の値が on になりませんでした。

原因を調べたところ、レンタルサーバー業者側で SSL アクセラレーターという仕組みが使われている可能性があるようでした。SSL アクセラレーターは SSL で使う暗号化・復号化の処理を専門的に行うハードウェアです。SSL アクセラレーターからWebサーバーまでは http 接続になるようで PHP からはクライアントから https 接続があっても分かりません。

幸い、そのレンタルサーバーでは https 接続の時は必ず https://ssl.example.com/ のようにサブドメインが「 ssl 」になるので、ホスト名から判別するような処理に切り替えました。

https 接続なのに $_SERVER[‘HTTPS’] の値が on にならない場合は SSL アクセラレーターが使われている可能性があるということを疑ってみてください。

関連記事

Leave a Reply