前提
前の業者が完成せずに中途半端に本番環境にのっているECCube、認証もかけずに放置していたらプレスリリースしていた関係かURL直打ちでものが売れてしまったとさ。。
というわけで、慌てて一般の人は見れないようにしてほしいとの電話が。
でも、次の業者は物を見てほしいので業者は見れるようにしてほしいと。
色々突っ込みどころはあるけれども取り急ぎ満たさなければいけない(?)要件は
・一般の人が見ると「まだOPENしてませんよ」に飛ばす
・業者はものを見れるようにしておく。
・触ると色々巻き込まれそうなのでできるだけ今あるものには手を加えたくない
ということで、認証付きのリバースプロキシを経由して認証していない人は告知画面に飛ばすことにする。
業者さんが見る目的なのでSSL証明書はそのままでhttpでアクセスしてもらえば既存webサーバのport番号を変えるだけで既存のものには影響でないつもり。
プロキシは認証処理あるので、インストール/アンインストールを考えるとdockerのopenrestyで作るのがよさそうかな。
同一ホスト上にあるので決裁モジュール等もきっと動いてくれるだろう。
という方針で作業開始。
試験機で
nginx周り
本番機はCentOS7.2。
portやらやら触るのでグルーバルIPあるやつでやらんと混乱しそう。
バックアップ機になる予定で契約だけしているさくらVPSにOSインストールして動作確認からはいる。
yum -y install docker systemctl start docker systemctl enable dockerdocker pull openresty/openrestydocker run -d -p 80:80 --name proxy openresty/openresty:trusty
きっと公式っぽいopenrestyのイメージ。最初タグ無し(latest)でpullしたけれどもUsageにはopenresty/openresty:trustyとなっていたのでこっちを利用。
ここでサーバのIPでhttpアクセスすると、起動はしている。
とりあえず中に入って確認。
docker exec -it proxy /bin/bash
多分、/usr/local/openresty/nginx/conf/nginx.conf
だけいじれば大丈夫そう。そのままいじってもいいけど、入っているエディタがvimでなくviで嫌いなのでコピー
docker cp proxy:/usr/local/openresty/nginx/conf/nginx.conf nginx.conf vi nginx.conf
中身はこんな感じ
server { listen 80; server_name localhost; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; #charset koi8-r; #access_log logs/host.access.log main; location /auth.html { access_by_lua_block{ ngx.header['Set-Cookie'] = 'gyousya=desu; path=/' } root html; } location /kokuchi.pdf { root html; } location / { root html; rewrite_by_lua_block{ local cookie_val = ngx.var.cookie_gyousya if (not cookie_val) then return ngx.redirect("https://www.rocher.kyoto.jp/") end } proxy_pass http://49.212.208.218:8081; }
location /auth.htmlに来た時にクッキーセットして
location / でクッキーがNilだとよそに飛ばす。
本来だとkokuchi.pdfに飛ばすけど告知分まだできていないということで自分の店に。
上の方のproxy_set_header系は後ろにあるapacheがリモートアドレス拾えるように。
proxy_passはhostのグローバルIP直接指定。
docker cp nginx.conf proxy:/usr/local/openresty/nginx/conf/nginx.conf
コンテナにコピー。コンテナへのコピーも今はできるのね。。
apache
apacheの設定も一応。ECCubeのドキュメントチラ見した感じだと必要なさそうな気もするけど元のIPもapache本体でも。実際にはheaderにX-Forwarded-For系がついていれば大丈夫そう。
#httpd -M | grep remoteip remoteip_module (shared)
yumで取りあえず入れたやつだけどmod_remoteip入っている。
本番機もyum(chefでpackage install)でやっているのできっと入っているはず。(未確認)
こちら参考に設定。
SSL止めてないけど明日。
EC-Cubeの動作確認していないけど、本番機(という名の残骸)に明日は直接設定。
動作確認は元々動いていないので難しいかな。。。