AWS上でELB -> EC2という構成でSSLのアクセスを行おうとしています

2017年6月14日 at 16:06

AWS上でELB -> EC2という構成でSSLの復号をELBで行っている環境にクライアントサイトの復元を行おうとしています。
クライアントサイトではssl_redirect_conf add-onを使用していており、
サイトを復元するとリダイレクトループが発生しましたとブラウザに表示されます。

色々と調べてWordPressやDrupalでは以下の記述を入れるケースが多かったので
concrete5の/index.phpに以下の記述を追加した所、現象は改善されました。


if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])
&& $_SERVER['HTTP_X_FORWARDED_PROTO'] === "https") {
$_SERVER['HTTPS'] = 'on';
}


確認したいのは2点になります
・上記の記述で問題なかったのか?
・追加する箇所はindex.phpが適切だったのか?

情報
 C5 バージョン:5.7.5.6
 PHP:PHP 5.6.26
 OS:CentOS release 6.8

以上、宜しくお願いします 

タグ:

Re: AWS上でELB -> EC2という構成でSSLのアクセスを行おうとしています

2017年6月21日 at 11:31
お世話になります。

下記のブログ記事でも書いているのですが、
http://concrete5.co.jp/blog/concrete5-load-balancer-session

下記の記述を /application/config/concrete.php で設定して頂く必要があります。

これは concrete5 が使っている PHP フレームワークの Symfony のセキュリティの機能で、ユーザーのアクセス元の IP アドレスが変わるとログアウトするように設計しています。

'security' => [
'session' => [
'invalidate_on_ip_mismatch' => false
]
]

ただ、 AWS ELB を間にすると、concrete5 側は ELB がアクセス元の IP と記録するのですが、この ELB がどんどんと IP を変えてしまうので、Symfony が違う場所 (IP) からユーザーがログインしている危ないログインだからログアウトさせようとしています。

最近は

$remoteIp = $_SERVER['REMOTE_ADDR'];
return array(
'security' => array(
'trusted_proxies' => array(
'ips' => ($remoteIp)
),
'session' => array(
'invalidate_on_ip_mismatch' => false
),
),
)


なんて付け加えたりしています。
 

Re: AWS上でELB -> EC2という構成でSSLのアクセスを行おうとしています

2017年6月21日 at 12:40
あと、SSLの件ですが、

まず AWS ELB は 443番 -> 80番 へ転送されているでしょうか。

そしてロードバランサー配下で 443 から80番へ転送される際は、
concrete5 では index.php ではなく
/application/bootsstrap/app.php


----------
$request = Request::getInstance();
if (
($request->headers->has('X-Forwarded-Proto')) &&
($request->headers->has('X-Forwarded-Proto') == 'https')
) {
$request->server->set('HTTPS', 'on');
}
----------

と記述していただくのがお作法になっています。



ELB 配下で全サイトの常時 SSL 化するのであれば、
SSL Redirect Config アドオンでも可能ですが、

Apache & Nginx の設定でも可能な方法を見つけています。
Qiita でも、設定サンプルを投稿しました。
http://qiita.com/katzueno/items/41593ab1d16718753a7e

さくらのレンタルサーバーでもあったのですが、
5.7.x 以下では場合によって、
"canonical_url"に強引に https の URL を入れて上げる必要があります。
http://concrete5.co.jp/blog/sakura-internet-ssl

以上、サーバーの Config 設定変更権限があれば concrete5 アプリケーションレベルではなく、ミドルウエアレベルでリダイレクト出来るので、若干のリダイレクトの速度と負荷の向上が図れると思います。

よろしくお願いします。