wordpressをWEB/AP/DBサーバの3層構造で構築
2016/02/13
wordpressをWEB/AP/DBサーバの3層を構築したときのメモ。(raspberryPIを3台で構築)
構成は図のような感じで、webサーバにnginx、APサーバにphp-fpm、DBサーバにmySQLを構築しました。
nginxの設定で、phpへのアクセスのみAPサーバに振り分けてphp-fpmで処理をさせ、それ以外の画像やjsなどはWEBサーバから返すようにしました。
ただ1点問題があり、wordpressで画像をアップロードしたりするとPHPでの処理となるためAPサーバ側にコンテンツが追加されます。そのため、アップロードしたはずの画像が見れなくなります。
対処としては、WEBサーバにwordpressのコンテンツをのせずに全部のリクエストをAPサーバに流す方法がありますが、横流しのオーバーヘッドがもったいないため、APサーバにlsyncdを入れてAPサーバ側の更新をWEBサーバに同意するようにしました。
これで今のところ正常に動いています。
正直wordpressはWEB層とAP層を分離する様には設計されていないということを実感しました。
nginxの設定例
phpだけAPサーバに振り分けるよう設定します
server {
...
location ~ /wordpress/\.php$ {
fastcgi_pass AP_SERVER_IP:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
...
}
lsyncdの設定例
APサーバ側のlsyncdの設定例。SSHでrsyncする場合、lsyncdの2.0.7ではSSHのポートを変更するオプションが使えなかったのでWEBサーバ側にrsyncdを立てて同期しました。 例ではuploadsフォルダのみ対象としていますが、wordpress以下を対象にすれば全て同期できます。
settings = {
statusFile = "/tmp/lsyncd.stat",
statusInterval = 1,
logfile = "/var/log/lsyncd.log",
insist = 1
}
sync{
default.rsync,
source="/var/www/html/wordpress/wp-content/uploads/",
target="WEB_SERVER_IP::wordpress/wp-content/uploads/",
rsync = {
archive = true,
},
}
rsyncdの設定例
webサーバ側のrsyncdの設定例。SSHを使う場合はrsyncdは不要。
...
[wordpress]
path = /var/www/html/wordpress/
use chroot = false
read only = false
...