Nginxの無印にはリバースプロキシとして使用する際の振り分け方法に、セッションを維持するものがありません。サードパーティのアドオンを追加してあげないといけないので、対応方法をメモする。
1.Nginxのソースコードを入手し解凍する
cd /tmp
wget http://nginx.org/download/nginx-1.10.1.tar.gz
tar xvfz nginx-1.10.1.tar.gz
2.nginx-sticky-module-ngモジュールのソースをダウンロードし解凍する
wget https://github.com/michaelneale/nginx-sticky-m odule/archive/master.zip
unzip master.zip
3.nginx-sticky-module-ngモジュールでzip提供されているものは1.9以降で互換性が無くて、エラーが出る。
/root/nginx-goodies-nginx-sticky-module-ng-1e96371de59f/ngx_http_sticky_module.c: In function ‘ngx_http_get_sticky_peer’: /tmp/nginx-goodies-nginx-sticky-module-ng-1e96371de59f/ngx_http_sticky_module.c:340:21: error: assignment makes pointer from integer without a cast [-Werror] iphp->rrp.current = iphp->selected_peer; ^ cc1: all warnings being treated as errors make[1]: [objs/addon/nginx-goodies-nginx-sticky-module-ng-1e96371de59f/ngx_http_sticky_module.o] Error 1 make[1]: Leaving directory `/tmp/nginx-1.9.0′ make: [build] Error 2
最新のコミットではすでに対応済みなので、zipじゃなくてソースコードをcloneするとはまらずに済む。zipの場合は、このコミットを参考に修正する。
3.モジュールをnginxフォルダ配下に移動させる。
cp -rp nginx-sticky-module-ng ./nginx
4.必要なモジュールをインストールする
yum -y install pcre-devel
4.Configureして、makeしてmake install する。
既存のnginxのConfigureオプションは次のコマンドで確認できる。
2>&1 nginx -V
それを参考にオプションを決定する。
./configure –prefix=/usr/share/nginx –sbin-path=/usr/sbin/nginx –conf-path=/etc/nginx/nginx.conf –error-log-path=/var/log/nginx/error.log –http-log-path=/var/log/nginx/access.log –http-client-body-temp-path=/var/lib/nginx/tmp/client_body –http-proxy-temp-path=/var/lib/nginx/tmp/proxy –pid-path=/var/run/nginx.pid –lock-path=/var/lock/subsys/nginx –user=nginx –group=nginx –with-file-aio –with-http_ssl_module –with-http_realip_module –with-http_addition_module –with-http_xslt_module –with-http_sub_module –with-http_dav_module –with-http_gunzip_module –with-http_gzip_static_module –with-http_random_index_module –with-http_secure_link_module –with-http_degradation_module –with-http_stub_status_module –with-pcre –with-debug –with-cc-opt=’-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector –param=ssp-buffer-size=4 -m64 -mtune=generic’ –with-ld-opt=’ -Wl,-E’ –add-module=./nginx-sticky-module-master/
make
make install
5.nginx.confで設定する。
http {
upstream app {
sticky;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
}
これで、セッションを維持してロードバランシングできるようになった。