nginx
2009/6/15更新
対応バージョン: 0.7.59
SSIを有効にして#execコマンドで外部プログラムを呼び出そうとしても機能せず、[an error occurred while processing the directive]というメッセージが返される。
<!--#exec cmd="<コマンド>"--> <!--#exec cgi="<コマンド>"-->
関連資料・記事
2009/6/9更新
対応バージョン: 0.7.59
nginxでSSIを使用するにはnginx.confのに以下の設定を追加する。それぞれの設定はhttp、server、locationのどのディレクティブにも記述可能である。
ssi {on|off}
SSI機能のon/offを指定する。デフォルトはoff。
ssi_silent_errors {on|off}
SSI実行時にエラーが発生するとサーバから[an error occurred while processing the directive]というメッセージが返されるが、このメッセージを抑止するかどうかを指定する。
onなら抑止、offなら出力。デフォルトはoff。
ただしこの設定でメッセージを抑止してもエラー自体は解消されないので注意すること。
メッセージの内容を変更したい場合はHTML内に以下のSSIコマンドを書く。
<!--#config errmsg="SSIでエラーが発生しました"-->
ssi_types
SSI実行時のMIME-type(text/html)に追加のtypeを設定する。
ssi_types text/xml;
ssi_value_length
SSIのコマンドにパラメータを渡す際の最大長。デフォルトは256(バイト)。
この値を越えてパラメータを渡した場合、SSIコマンドは実行されずサーバから[an error occurred while processing the directive]メッセージが返される。
関連資料・記事
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)
2009/6/7更新
対応バージョン: 0.7.59
公式サイト
準備
導入OS
Ubuntu 9.04
管理用アカウント作成
% sudo groupadd -r www % sudo useradd -r -g www -s /bin/false -d /nonexistent www
インストール
配布ファイル展開
% tar zxvf nginx-0.7.59.tar.gz % cd nginx-0.7.59
make,インストール
% ./configure --user=www --group=www <オプション>
デフォルトで以下のモジュールが有効になる。
ngx_http_access_module
ngx_http_auth_basic_module
ngx_http_autoindex_module
ngx_http_browser_module
ngx_http_charset_module
ngx_http_empty_gif_module
ngx_http_fastcgi_module
ngx_http_geo_module
ngx_http_gzip_module
ngx_http_limit_req_module
ngx_http_limit_zone_module
ngx_http_map_module
ngx_http_memcached_module
ngx_http_proxy_module
ngx_http_referer_module
ngx_http_rewrite_module
ngx_http_ssi_module
ngx_http_upstream_ip_hash_module
ngx_http_userid_module
上記以外に必要なモジュールがあれば<オプション>で指定する。オプションでは以下のモジュールが使用できる。
ngx_http_addition_module
ngx_http_dav_module
ngx_http_flv_module
ngx_http_gzip_static_module
ngx_http_image_filter_module
ngx_http_random_index_module
ngx_http_realip_module
ngx_http_secure_link_module
ngx_http_ssl_module
ngx_http_stub_status_module
ngx_http_sub_module
ngx_http_xslt_module
ここでは以下のモジュールを有効にする。
WebDAVサポート
--with-http_dav_module
SSLサポート
--with-http_ssl_module
また、デフォルトで有効になるモジュールのうち必要ないものはあらかじめ無効にしておくことでパフォーマンスアップが図れる。
% make % sudo make install
インストール物 (man,infoは除く)
/usr/local/nginx/*/*
各種設定
/usr/local/nginx/conf/nginx.confにて基本的な設定を行う。
以下、主な設定項目について説明する。パスを設定するところで相対パスを指定した場合は/usr/local/nginxが起点となる。
サーバの待ち受けポート
http { : server { listen 80;
サーバルート
http { : server { : location / { root html;
インデックスファイル
リクエストが「/」で終わっている場合にインデックスファイルとして検索するファイルを指定する。
http { : server { : location / { : index index.html index.htm;
動作確認
デーモンを起動する。
% sudo /usr/local/nginx/sbin/nginx
待ち受けポートがLISTENになっているか確認する。
% netstat -nat|egrep '(Proto|:80)' Proto 受信-Q 送信-Q 内部アドレス 外部アドレス 状態 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
WebブラウザでlocalhostにアクセスできればOKである。
デーモンを終了する。
単にkillすればよい。
% sudo killall nginx
initスクリプト設置
Debパッケージで配布されているスクリプトをインストールする。
% sudo aptitude download nginx % sudo dpkg -i nginx_0.6.35-0ubuntu1_i386.deb ./etc/init.d/nginx
デーモンのパス変更(/usr/sbin -> /usr/local/nginx/sbin)、及びPIDファイルの指定を削除する。
% sudo sed -i 's_/usr/sbin/nginx_/usr/local/nginx/sbin/nginx_' /etc/init.d/nginx % sudo sed -i 's_--pidfile __' /etc/init.d/nginx % sudo sed -i 's_-p /var/run/$NAME.pid __' /etc/init.d/nginx % sudo sed -i 's_/var/run/$NAME.pid __' /etc/init.d/nginx