Nginxはインターネット上のユーザーからのリクエストを、バックエンドに置いてある複数のサーバーに中継するリバースプロキシの機能を最初から持っています。これを使って、Nginxを組み込んだフロントエンドを実務に耐えるロードバランサーにすることができます。
【1】Nginxでのリバースプロキシを利用したロードバランサーの設定
次のサイトhttp://blog.serverworks.co.jp/tech/2012/09/28/nginx-04/に設定方法が紹介されています。確認してみました。こちらの条件は
というものです。構成は、上記サイトで紹介しているように、次のようになります。
本番では、MySQLサーバーを別に置き、クラスタ構成にすべきですが、まあ、取り敢えず実験用なので(^_^;)。Wordpressの最新版を使うと、次のようになりました。
設定の仕方と既知の問題点を以下、まとめてみます。上記サイトから得たNginxの設定は、以下の通りです。
# You may add here your # server { # ... # } # statements for each of your virtual hosts to this file ## # You should look at the following URL's in order to grasp a solid understanding # of Nginx configuration files in order to fully unleash the power of Nginx. # http://wiki.nginx.org/Pitfalls # http://wiki.nginx.org/QuickStart # http://wiki.nginx.org/Configuration # # Generally, you will want to move this file somewhere, and start with a clean # file but keep this around for reference. Or just disable in sites-enabled. # # Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples. ## ## # Load Balancer ## # upstream ubuntu03.it-ishin.com { upstream backend { server vubuntu01.it-ishin.com:80; server vubuntu02.it-ishin.com:80; server vubuntu03.it-ishin.com:80; } server { listen 80; server_name ubuntu03.it-ishin.com; root /var/www/html/wordpress; location / { # proxy_pass http://ubuntu03.it-ishin.com; # index index.html index.htm; proxy_pass http://backend; } location /wp-admin { proxy_pass http://backend; } location /wp-login.php { proxy_pass http://backend; } # location = / { # rewrite ^(.+)$ /index.php; #} #location = /wp-admin { # rewrite ^(.+)$ /wp-admin/index.php; #} proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Real-IP $remote_addr; } # HTTP Server # server { # listen 80; # server_name ubuntu03.it-ishin.com; # location / { # root /var/www/html/wordpress; # index index.php index.html; # try_files $uri $uri/ /index.php?$args; # } # location ~ \.php$ { # fastcgi_split_path_info ^(.+\.php)(/.+)$; # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # With php5-fpm: # fastcgi_pass unix:/var/run/php5-fpm.sock; # fastcgi_index index.php; # include /etc/nginx/fastcgi_params; # } #} #location / { # proxy_http_version 1.1; # proxy_set_header Connection ""; # proxy_pass http://apache; #}
Nginxはupstreamディレクティブで、インターネット上のクライアント・ユーザーからのリクエストを振り分けるサーバーを指定するようです。コメント部分は必要はないですが、取り敢えず残しておきました。
ただし、下記設定でも動作するのではないかと思います。
# upstream ubuntu03.it-ishin.com { upstream backend { server vubuntu01.it-ishin.com:80; server vubuntu02.it-ishin.com:80; server vubuntu03.it-ishin.com:80; } server { listen 80; server_name ubuntu03.it-ishin.com; root /var/www/html/wordpress; location / { # proxy_pass http://ubuntu03.it-ishin.com; # index index.html index.htm; proxy_pass http://backend; } }
以下、サイト管理者の取りあえずの設定ファイルを記しておきます。Wordpressのプラグインをインストールする際、タイミングによってはプラグインのインストールに失敗してしまう仮想マシンもあるようです。クーロンの設定を短くしてみるとうまく行くかも知れません。ここのところは、ただ今、試行錯誤中です。
# You may add here your # server { # ... # } # statements for each of your virtual hosts to this file ## # You should look at the following URL's in order to grasp a solid understanding # of Nginx configuration files in order to fully unleash the power of Nginx. # http://wiki.nginx.org/Pitfalls # http://wiki.nginx.org/QuickStart # http://wiki.nginx.org/Configuration # # Generally, you will want to move this file somewhere, and start with a clean # file but keep this around for reference. Or just disable in sites-enabled. # # Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples. ## ## # Load Balancer ## # upstream ubuntu03.it-ishin.com { upstream backend { server vubuntu01.it-ishin.com; server vubuntu02.it-ishin.com; server vubuntu03.it-ishin.com; # server 192.168.1.101; # server 192.168.1.102; # server 192.168.1.103; } server { listen 80; server_name ubuntu03.it-ishin.com; # root /var/www/html/wordpress; location / { # proxy_pass http://ubuntu03.it-ishin.com; # index index.html index.htm; proxy_pass http://backend; } location /wp-admin { # proxy_pass http://backend; proxy_pass http://vubuntu01.it-ishin.com; } location /wp-login.php { # proxy_pass http://backend; proxy_pass http://vubuntu01.it-ishin.com; } # location = / { # rewrite ^(.+)$ /index.php; #} #location = /wp-admin { # rewrite ^(.+)$ /wp-admin/index.php; #} # proxy_set_header Host $host; # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # proxy_set_header X-Forwarded-Host $host; # proxy_set_header X-Forwarded-Server $host; # proxy_set_header X-Real-IP $remote_addr; }
Nginxのロードバランサー・サーバーのドキュメントルートは/var/www/html/wordpressとなっていますが、こちらのサーバーにWordpressをインストール必要は全くありません。なお、仮想マシンにUbuntu14.04LTSサーバー版をインストールする際には、①SSHサーバー②LAMPサーバーーを選んでインストールして下さい。忘れた場合は、$ apt-get install mysql-serverとやって(途中で、MySQLの管理者のパスワード設定画面が出ます)、その後で$ apt-get install phpmyadminとやると、LAMPサーバーとなります。MySQLの管理者のパスワードを聞かれた後、phpMyAdminのデータベース用のパスワードを設定することになります。
Apacheのバーチャルホスト機能は使わないでWordpressをインストールしてみて下さい。/etc/apache2/sites-available/000-defaultのドキュメントルートは初期設定で、/var/www/htmlとなっていますが、html内にunzipでWordpressを解凍した上で、/var/www/html/wordpressに変更する。なお、$ apt-get install unzipが必要になります。
また、MySQLはデフォルトでリモートのホストにアクセスすることを禁じています。これについては、下記サイトなどを参照されて下さい。
http://linuxserver.jp/%E3%82%B5%E3%83%BC%E3%83%90%E6%A7%8B%E7%AF%89/db/mysql/%E5%A4%96%E9%83%A8%E6%8E%A5%E7%B6%9A%E8%A8%B1%E5%8F%AF%E8%A8%AD%E5%AE%9A.php