nginx 資料一覧

Apache 3ノードをnginxでロードバランスする設定(VirtualBox + Vagrant)

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にて公開している。

参考サイト