読者です 読者をやめる 読者になる 読者になる

【Nginx】リバースプロキシ + ロードバランサー を設定する

Nginx

以下のサイトを参考にさせていただきました。
ありがとうございました。

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 でもイジってみようと思う。