ECCUBE on AWS ( Cloudfront -> ELB -> EC2 )

AWSのセミナー前に、AWSに問い合わせてみたところ、
SSL通信するには、
ロードバランサー(ELB)1つに対して、1つの契約が必要と言われたので、

CloudFront > ELB > EC2

しかたなく、

どうしても落ちてほしくないドメインだけを、
ELBを載せようと計画し、

セミナー担当者の方に相談してみたところ、
「1つのELBの契約で、動くのじゃないか?」という、以外な回答で、
ただし、

CloudFront > ELB > EC2

※ただし、条件付き(後述)

***

ひとまず、資料(上図)を作り、担当者にメール

したものの、返事がない・・・けど、
リリース間近なので、いろいろと、試してみたら、
なんとか、

Cloudfont -> ELB -> EC2 が、
鍵付きのSSLで通信出来た!!

.
しかし、
ECCUBEをインストールし、テスト環境と同じように表示されるようになったものの、
管理画面にログインしようとするけど、入れない!!

 

AUTH_MAGICを変更したからだと、戻してみるけど、ダメ。

error.logを覗くと、

管理者パスワードがわからなくなった時に、LC_Page_Admin_Index.phpの

$this->arrErr = $this->lfCheckError($objFormParam);

を、
コメントアウトして、無理やりなスリ抜けもやって見たけど、ダメ。
どうも、該当行が違うみたい。

config.phpを疑ってみる


「ECCUBE SSL ログインできない SSL」などでググってみると、
HTTP_URLに、https:// の記述があると、ダメってことで、

http:// 戻してみるが、

リダイレクトが繰り返されダメ!!Orz

ADMIN_FORCE_SSL = trueにしてみるけど、甲斐なし

***

これらを、踏まえ、調べてみると、

$_SERVER[‘HTTPS’]をNULLで返すサーバーがあり、sfIsHTTPSで正常に判定できない為、発生する物と思われます。

http://svn.ec-cube.net/open_trac/ticket/1501

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

config.phpなどから、
$_SERVER[“HTTPS”] の値を吐き出してみると、

NULL だった。

犯人は、Cloud -> ELB -> EC2間のHTTP


Origin Settingsを、Match Viewerにして、

Cloudfront > Origin Settings > Match Viewer

ELBのInstanceに、HTTPS のポートを追加してみると、

ELB HTTPS

「SSL用の証明を追加しろ」と、怒られた。

ELBは1つしかSSL証明を追加できないので、ここに追加して良いものか?
そもそも、証明書を発行するドメインが不明・・・

$_SERVER[‘HTTPS’]をいじってみる


$_SERVER[‘HTTPS’] = on にしてみると、
普通に動く(一部、例外あり)ので、ECCUBEのソースを探ってみたら、

となっているので、

コレをジャックするしかない!?

ELBに証明書を入れても、ELB -> EC2間は平文になってしまうようで、
これを、回避するために、ELBは、特殊なヘッダーを付けてくれるようです。

$_SERVER[“HTTP_X_FORWARDED_PROTO”]

参考 >> http://blog.purazumakoi.info/?p=949

***

実際のところ、$_SERVER[‘HTTPS’]を使っている箇所は、

  • GC_Utils.php
  • SC_Utils.php

以外にも、module/pluginなどで、割りと使われているので、

HTTP_X_FORWARDED_PROTOで判別後、

$_SERVER[‘HTTPS’] = on

にするのが、みたいです!

class_exあたりで変更を加えていいのですが、
割りと、初期に呼ばれるdefine.phpに、定義しました。

が、

今回、上にCloudFrontがいるので、届く情報は「http」だけOrz

なので、カッコ悪いけど、URLで判断するしかなさそう。

PS.

config.phpのADMIN_FORCE_SSLですが、Trueにすると、リダイレクトになるので、
HTTP_URLを「https://」にしてみました。

管理画面にもマイページにも入れるし、ログイン・ログアウトも問題なさそうです。

PS2.

WordPressでも、同じことが起き得ます。
wp_config.phpあたりで定義したらよいのかな?

-

AWS x postfix(メールサーバー構築)/ 外部転送編

AWSハンズオンセミナー

先日、Amazon ハンズオンセミナーで、

サーバー(EC2) x RDS x ロードバランサー

の構築の術を、3時間で学んできたのですが、
※と言っても、テキストを見ながら、コマンドを打ちこむだけなので、
実際には、どうなっているのかは、わかりにくいかもだけど、
たくさんの収穫!

でも、

今回は、メールサーバー構築のお話。

 

初めて触るに近いLinux(VPS)。
レンタルサーバーや、Windwos(xampp)とかでカンタンに構築できてしまうこともあり、
大昔に、触ってみたけど、実際に運用目的がなかったので、深入りはせず、
lsとか、カンタンなコマンドだけは知っている程度なので、

すべては手探りです!

***

まず、
AWS内のサービス「SES」を使ってみるが、
届いたメールはS3に保存されるだけで、
しっかり設定をすれば、可能なことが増えるようだが、

今回の目的「カンタンに」から、離れているため、

postfixを使ってみる。

POP3/IMAPを使うとなると、Dovecotというサービスが必要となりますが、
今回は、外部のメールサービス(gmail)に転送して、使いたいので、省略。

 

AWSでPostfixが使えるようにやること


やることは3つ。

  1. Route53にて、A、MXレコード作成
    • mail.xyz.com A 10.10.10.10
    • mail.xyz.com MX 10 mail.xyz.com
  2. セキュリティーグループにポートを追加
    1. POP3 / 110
    2. IMAP / 143 (不要かも?)
    3. SMTp / 25
  3. postfixインストールと設定

***

今回ハマったのは、その設定。

あたりを見てもらえば、インストール・設定までは、できるはず。

今回、gmailにすべてのメールを転送するので、
変更した箇所は、

inet_interfaces = localhost > inet_interfaces = all

だけ。

本来なら、mydomainなども、設定が必要ですが、
マルチドメインで運用するので、省略

 

外部のメールサーバーに転送(マルチドメイン対応)


基本は、この2箇所の参考先の通りですが、

変更箇所は、

# /etc/postfix/main.cf

と、

# /etc/postfix/virtual

***

まず、メールが届かないことには、SSLの認証も出来ず
メールが届かない、届かないと、1日明け暮れたので、

postfix gmail 転送

このメールが届いた時には、

キタ━━━━━━━━m9( ゚∀゚)━━━━━━━━!!

と、大いに感動!!

***

あとは、Coudfrontとの格闘です。
どうも、Round53の設定が間違っているのか?、エラーが出るのですよね。


PS. 覚え書き

サブドメイン名付きメールアドレスで、受信するには?!

[ 参考 ]

[ やったこと ]

  • サブドメインにも、MX追加(ec.xyz.com MX 10 mail.xyz.com)
  • mail.xyz.comは、固定IP に(ELBだと、ダメだった)
  • virtual_alias_domains に、サブドメインの指定(必要か?)
  • /etc/postfix/virtual に、サブドメイン付きメアドを追加。

とりあえず、受信できたので、
次に取得するドメインで、1つずつ除外して、検証してみます。

-