リバースプロキシnginxにsslを設定した裏のEC-CUBE 2で管理者ログインできない

EC-CUBE 2を触ることがあって、カード決済テストするにはhttpsの環境が必要..ということで開発環境にもsslを導入しました

Nginx – Apache – EC-CUBE 2

と表にNginxを立ててたので、そこにsslを導入
config.phpのHTTP_URLをhttpsにします

$ vim config/config.php

define('HTTPS_URL', 'https://sample.co.jp');

これで、https化できたのですが、管理者画面でエラーになります
コードを読み進めると、httpでアクセスしてるようで..

リバースプロキシNginxのconfに

proxy_set_header X-Forwarded-Proto $scheme;

を設定しておいて、EC-CUBE2でもhttpsで動いてほしかったのですが、対応してない様子

data/require_base.php で無理やり対応しました

$ vim data/require_base.php

33行目あたりに

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

これで、動作するようになりました

EC-CUBEでモジュールのダウンロードに失敗する

EC-CUBE v2.13.3 にEC-CUBEペイメント決済モジュール(2.13系)のダウンロードに失敗しました

エラーログをみるとこんな感じ
$ data/logs/ownersstore_batch_update.log

2016/03/25 08:24:40 [/upgrade/index.php] ハッシュ値が一致しないため, コピー先が取得できません: /var/www/html/sample/data/downloads/tmp/1458861880/mdl_pg_mulpay/config.php from xx.xx.xx.xx
2016/03/25 08:24:40 [/upgrade/index.php] distinfoファイルの作成に成功しました: /var/www/html/sample/data/downloads/backup/update_1458861880/distinfo.php from xx.xx.xx.xx

以前一度できたのに、なぜ今回はできない..とソースコードを追ってましたが原因は海外(インドネシアのバリ)からアクセスしているからでした。。
Proxyを通すとあっさりできました

まさかこんなことではまるとは

参考:
海外から見れない日本のサイトがあるとき

EC-CUBEにpaypal決済を入れるので調べてみた

ECサイトの決済導入にPaypalを検討してみた | bgbgbg
の補足を自分のためにメモを残します

EC-CUBEは v.2.13.3 で試しました

モジュールが公開されてるのでこれをいれます
v.2.13.3は対応バージョンに入ってませんが、大丈夫でした
ペイパル ウェブペイメント プラス 決済モジュール(2.11系・2.12系・2.13系) / ECサイト構築・リニューアルは「ECオープンプラットフォームEC-CUBE」

モジュールのいれ方はここのPDFを参考
www.ec-cube.net/document/MN02_module_install.pdf

Paypalでビジネスアカウントを作る必要があるようです
EC-CUBEプラグインで使うにはAPIキーを発行、このへんで手順を確認してやる
PayPal(日本語) – ペイパル|サポート|導入・ご利用方法|エクスプレスチェックアウト

Paypal決済で不正が起きた場合などのために目を通しておく
安全に販売するためのヒント – PayPal
売り手保護制度もあります
PayPal(日本語) – ペイパル|サポート|よくあるご質問|売り手保護制度について

EC-CUBEの商品情報を一気に置換する

httpのサイトからhttpsのサイトに移行したさい、httpのリンクが埋め込まれていたので置換してみました
MysqlのデータペースでSQLを発行して変換しました
本番でやる前にはバックアップを取りましょう

<img src=”http://xxxxx”>

<img src=”//xxxxx”>

に変えました
http:とかhttps:とか付けない場合、ブラウザで自動判定してくれます

置換する前に、埋め込んでるリンクがhttpsに対応しているか、そのリンクにアクセスして試しましょう
(同じドメインだったら大丈夫のはず)

mysqlにログインします
まずは確認

サブコメント1にhttp:の記載があるかを確認

 select product_id, sub_comment1 from dtb_products where sub_comment1 like '%http:%';

product_idとか見といて置換後に確認するといいと思います
そしたら置換

update dtb_products set sub_comment1 = replace(sub_comment1, 'http:', '') where sub_comment1 like '%http:%';

慎重にドメイン含めて置換してドメインごとに確認するのがいいかもしれません

update dtb_products set sub_comment1 = replace(sub_comment1, 'http://sample.co.jp/', '//sample.co.jp/') where sub_comment1 like '%http://sample.co.jp/%';

数が多いと確認が大変です、最初からhttpとっておけば楽でした