WordPressとWebシステムを同一ドメインで共存させるということをやる機会がありましたのでやったことをメモで残しておきます。
WebシステムとWordpressはAWSのEC2で別々のサーバとして動作しており、/mediaへのアクセスはwordpressの方へ捌くということをやっております。
Webシステムの方は既に稼働済でwordpressの方へ新規で構築し、ロードバランサ側でアクセスを捌く設定追加を行っております。
動作のイメージ
hogehoge.comにアクセス → Webシステムの方へアクセス
hogehoge.com/media → Wordpressの方へアクセス
やったこと
やったことは大きく二つ
- ロードバランサ(ALBの設定)
- リクエストの入り口
- Webシステム、Wordpressのどちらかにアクセスを振り分けるリバースプロキシのような役割
- Apacheの設定
- 受け付けたリクエストを内部で処理するようにドメインとパス書き換える
- /mediaというパスを排除し、インスタンス内(localhost)で処理を捌くように書き換え
- 見かけ上(ブラウザに表示されている)は大元のリクエストURLをそのまま使用できるようにする
- 受け付けたリクエストを内部で処理するようにドメインとパス書き換える
対応内容
ロードバランサの設定
- wordpress用のターゲットグループを作成し、wordpressのインスタンスを紐付ける
- ロードバランサの作成を行い
- パスが
/media*
の場合はwordpress用のターゲットグループに転送するように設定する
- パスが
Apacheの設定
/etc/httpd/conf/httpd.conf
を編集し、下記を追加
- URLの書き換えを行うのでモジュールの読み込み、設定の有効化を行う
LoadModule rewrite_module modules/mod_rewrite.so
RewriteEngine on
-
/var/www
のAllowOverride none
となっている部分をAllowOverride All
に変更する。- こちらは.htaccessによる設定の上書きを許可するための設定。今回の設定に関わる内容というよりはWordpress側の設定になるかも
<Directory "/var/www">
AllowOverride All
.
.
.
</Directory>
- リバースプロキシの設定
- /mediaでアクセスがきた場合にlocalhostとしてアクセスを捌くように設定
- ProxyPassReverse の設定はリダイレクトによるアクセスがきた場合に捌く設定
- どちらも必要なので両方書いておく必要あり
ProxyPass /media http://localhost/
ProxyPassReverse /media http://localhost/
- URLの書き換えを行う。Wordpressのインスタンス上では/mediaから始まるパスでアクセスを捌くわけではないので/mediaを除外したパスとなるようにURLの修正を行う。
- この際にURLの見かけ上はドメインはそのままで/mediaを含むURLでアクセスを捌きたいので/〇〇でドメインを含めずに指定する必要がある。
-
RewriteRule ^/media/$ /media [R=302,L]
では/media/でピンポイントでアクセスがきた場合にリクエストがうまく捌けず403エラーになってしまうようだったので/mediaに書き換えてリダイレクト してしまうように設定- ここはもっといいやり方はある気がする...
RewriteRule ^/media/$ /media [R=302,L]
RewriteRule ^/media/(.*)$ /$1
以上こんな感じでwordpressとWebシステムの共存ができました。
メモリながらやっていなかったのでちょっと漏れがあるかもしれないけどポイントはこんな感じになると思う。