はじめに
表題の件での対応メモです。
リバースプロキシの設定は初めてだったので、ちょっとハマりました。
やりたいこと
(1)webサイト(wordpress) : https://hoge.com
(2)ecサイト(eccube4) : https://shop.hoge.com
リバースプロキシで別サーバにあるecサイトを本家サイトのサブフォルダ配下にあるように見せたい。
https://hoge.com/shop -> reserve proxy - > https://shop.hoge.com
設定(1) - webサイト側
confに以下を設定。.htaccessでは設定できないので注意。
SSLProxyEngine On
ProxyPass /shop https://shop.hoge.com
ProxyPassReverse /shop https://shop.hoge.com
問題点
css/js/imageなどが読み込めない!
eccube4では、url生成にsymfony/twigの以下の関数を利用しています。
(1)asset('style.css')
=> /html/template/default/style.css => https://hoge.com/html/template/default/style.css => エラー
↓本当はこうしたい
https://hoge.com/shop/html/template/default/style.css
(2)url('homepage')
=> https://shop.hoge.com/ => エラーではないが、このドメインは見せたくない
↓本当はこうしたい
https://hoge.com/shop
上記関数のソースを直すことはやりたくないし、symfonyの設定等で変更できそうな気がするが、ググってもわからず。
ちょっと力業になるが、以下のように対応した。
設定(1)・改 - webサイト側
SSLProxyEngine On
ProxyPass /shop https://shop.hoge.com/shop
ProxyPassReverse /shop https://shop.hoge.com/shop
設定(2) - ecサイト側
(1)サブフォルダ(shop)配下で動作するように構成を変更。これによってasset()の問題を回避
(2)HTTP_HOSTの書き換え。これによってurl()の問題を回避
$_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
ただし、Requestクラスを生成する前に実行する必要あり。
最後に
もっとスマートな対応方法があれば教えてください。