AWS ELBにEC-CUBEでSSLのリダイレクトに悩まされて解決した方法。

クライアント側で用意したサーバがAWS。

というか、実際はAWSとも知らされておらず、FTPアカウントとphpmyadminを用意してもらってEC-CUBEを設定する案件がありました。

クライアントの先にいるシステム担当会社とも話ができず、ドメインから検索してサーバがAWSということはなんとか解ったのですが、AWSに不慣れなため非常に苦労しました。

インストールしたのはデザインテンプレートの関係で最新のEC-CUBE3ではなく、2.3.5版。悩まされたのは、EC-CUBEの初期設定でhttps強制をするとループが発生。

EC-CUBEのhttps強制は、インストール画面にも表示されますが、要は
data/config/config.phpの
 define(‘ADMIN_FORCE_SSL’, FALSE);
の設定。

これをTRUE(強制)にすると管理画面にアクセスした際、ブラウザが
xxxx.jp でリダイレクトが繰り返し行われました。
となってしまい、NG。

それじゃあということで.htaccessでhttpをhttpsに強制しても同じくNG。

EC-CUBEの各テンプレートのリンクパスをhttpsから書いたりしましたが、ページを遷移するといつのまにかhttpになってしまいます。

さらに(意地になって)HEAD内にJavaScriptでhttpをhttpsに変えても、毎度毎度リンクパスは(ルートパスにしていても)なぜかhttpに行き、それからJSでhttpsにリダイレクトしている始末。

そんなにhttpに戻りたいのか?と言いたくなるほどでして。

まあいいかと、JSでhttpsに強制して、買い物の動作テストをすると、カード情報の画面で表示エラー(真っ白)に。

あー、それ致命傷じゃん。

結局、長年懇意にしている天才肌のプログラマーさんに教えを乞うと、
ロードバランサー配下なので元のリクエストがhttpsなのかEC-CUBEはわかっていない。
とのことで、下記のサイトにある「SetEnvIf」で対応すべしとのことでした。

AWS ELB + SSL Termination下でEC-CUBEを正しく動かす(続 カッコの付け方)
(以下抜粋)
mod_setenvif
apacheモジュールで setEnvIfというのがあります。これを使って$_SERVER変数を無理やり追加します。
SetEnvIf X-Forwarded-Proto ^https$ HTTPS=on

ありがとうございます。

.htaccessに上記の1行(SetEnvIf ***)を書いてUPしたら、解決しました。

プログラマーさんの指示とこのブログ主さんのおかげで、長いトンネルから抜け出すことができました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください