以下のサイトを参考にさせていただきました。
ありがとうございました。
http://d.hatena.ne.jp/shim0mura/20120110/1326198429
http://blog.chibiegg.net/2011/11/17_10_616.htm
想定する構成は以下になる。
「クライアント」→「キャッシュサーバ&ロードバランサー(Nginx)」→「Webサーバ(Nginx)」
キャッシュサーバで画像、CSS、JSなどの静的コンテンツをキャッシュし、
ロードバランサーでWebサーバに振る。
CentOS 6.4 でやりました。
【キャッシュサーバの設定】
nginx.conf の httpディクレティブに以下を追記する。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
#キャッシュの保存期間と保存場所
#メモリを128M使用し、キャッシュの保存期間が120分で、キャッシュファイルの最大容量が512MB
proxy_cache_path /var/cache/nginx/static_file_cache levels=1:2 keys_zone=cache_static_file:128m inactive=120m max_size=512m;
proxy_temp_path /var/cache/nginx/temp;
upstream web_server {
server 192.168.11.92; #Webサーバ
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
一応、キャッシュファイルの保存場所「/var/cache/nginx/」が存在するかを確認する。
default.conf の locationディクレティブに以下を追記する。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
location / {
# proxy_pass で設定したURLに飛ばすので、OFFにする。
proxy_redirect off;
#GET以外のアクセスと静的ファイル以外はキャッシュしないので、
#$do_not_cache を 1 にしておく。
set $do_not_cache 0;
if ($request_method != GET) {
set $do_not_cache 1;
}
if ($uri !~* ".(jpg|png|gif|jpeg|css|js|swf|pdf|html|htm)$") {
set $do_not_cache 1;
}
proxy_no_cache $do_not_cache;
proxy_cache_bypass $do_not_cache;
proxy_cache cache_static_file;
proxy_cache_key $scheme$host$uri$is_args$args;
proxy_cache_valid 200 302 60m; #status 200 or 302 は 60分キャッシュ
proxy_cache_valid 404 20m; #status 404 は20分キャッシュ
proxy_pass http://backend; #ここの backend はhttpディクレティブで設定した変数
break;
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
あとは再起動すればOK。
これでWebサーバのログに静的コンテンツは表示されないはず。
Webサーバはキャッシュサーバ以外からのアクセスを遮断しておく。
location / {
allow 192.168.11.3; #このIPを許可。
deny all;
}
【ロードバランサー】
キャッシュサーバに weight を設定するだけで分散してくれる。
upstream backend {
server 192.168.11.92 weight=1;
server 192.168.11.96 weight=1;
}
設定項目が weight しかないみたい。
Apacheは色々と設定できたから少し寂しい気がする・・・。
ただ、自動的にフェールオーバーしてくれるので、
LVS + KeepAlived で構築するよりもお手軽なのは嬉しい。
http://blog.jsdelivr.com/2013/01/nginx-load-balancing-basics.html
次は LVS + KeepAlived でもイジってみようと思う。