nginx 資料一覧
2016/02/21更新
対応バージョン: 1.8.1
ApacheのHTTPサーバ3台をnginxでロードバランスする設定をVirtualBox + Vagrantを用いて何度も再現できるようにする。
Apache #1: 192.168.33.11
Apache #2: 192.168.33.12
Apache #3: 192.168.33.13
nginx(ロードバランサ): 192.168.33.19
Apache上には特にコンテンツは配置せず、nginxのロードバランスも単純なラウンドロビンとする。
またOSはCentOS 7.2を使用する。
Vagrantfile
Apache 3ノードとnginxにそれぞれIPアドレスを付与し、後述するセットアップスクリプトを実行させ手動での設定を不要とする。
VagrantのBoxファイルは以前Vagrant Cloudに公開したものを使用する。
# -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure(2) do |config| # common config.vm.box = "kogurek1/centos72_64_min" # HTTP Server #1 - Apache config.vm.define :www1 do |v| v.vm.hostname = "www1" v.vm.network "private_network", ip: "192.168.33.11" v.vm.provision :shell, :path => "install_apache.sh" end # HTTP Server #2 - Apache config.vm.define :www2 do |v| v.vm.hostname = "www2" v.vm.network "private_network", ip: "192.168.33.12" v.vm.provision :shell, :path => "install_apache.sh" end # HTTP Server #3 - Apache config.vm.define :www3 do |v| v.vm.hostname = "www3" v.vm.network "private_network", ip: "192.168.33.13" v.vm.provision :shell, :path => "install_apache.sh" end # Load Balancer - nginx config.vm.define :lb do |v| v.vm.hostname = "lb" v.vm.network "private_network", ip: "192.168.33.19" v.vm.provision :shell, :path => "install_nginx.sh" end end
セットアップスクリプト
install_apache.sh
Apacheのインストールとサービスの有効化を行う。
#!/bin/bash yum -y install httpd systemctl enable httpd systemctl start httpd
install_nginx.sh
nginxのインストールとロードバランスの設定、及びサービスの有効化を行う。
設定は2段階になっており、まずApache 3ノードをひとまとめにして「backend」という名前を付けて/etc/nginx/conf.d/backend.confに記載し、nginxへのアクセスをこの「backend」にProxyする設定を/etc/nginx/conf.d/default.confに記載する。
#!/bin/sh rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm yum -y install nginx cat << END > /etc/nginx/conf.d/backend.conf upstream backend { server 192.168.33.11; server 192.168.33.12; server 192.168.33.13; } END sed -i "/index.htm/a proxy_pass http://backend;" /etc/nginx/conf.d/default.conf sed -i "s/^proxy_pass/ proxy_pass/" /etc/nginx/conf.d/default.conf systemctl enable nginx systemctl start nginx
※上記スクリプトだと分かりにくいがdefault.confは以下のようになる。
8 location / { 9 root /usr/share/nginx/html; 10 index index.html index.htm; 11 proxy_pass http://backend; <--- 追加 12 }
仮想サーバ生成
以上の3ファイルが用意できたらvagrant upを実行するだけでOSイメージの入手からVMの作成、クラスタの構成まで完了する。
% vagrant up % vagrant status Current machine states: www1 running (virtualbox) www2 running (virtualbox) www3 running (virtualbox) lb running (virtualbox) :
あとはnginx(192.168.33.19)にブラウザでアクセスすればApache 3ノードに順番にリクエストが送られる。
尚、今回用意したファイルはGitHubにて公開している。
https://github.com/kogurek1/vagrant_nginx-apache
参考サイト
nginx技術情報 (Qiita)