nginxとは
高い並行性と処理能力メモリ使用量の小ささに重点をおいた設計となっている
イベント駆動アーキテクチャ(apacheのprefork:プロセス駆動アーキテクチャ)を採用しており
処理が軽く、大量のリクエストをさばくことが得意、C10K問題を解消される
逆にcpu処理が必要な処理には向いていない
処理時間が長くなる処理を実行した際にそこでプロセスがブロックされてしまい処理能力が落ちる
基本コマンド
### 設定ファイルの確認 ### root@hostname:/home/shimizu# /etc/init.d/nginx configtest Testing nginx configuration: nginx. root@hostname:/home/shimizu# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful ### バージョンやコンパイル時の情報を出力する ### root@hostname:/home/shimizu# nginx -V nginx version: nginx/1.2.1 TLS SNI support enabled configure arguments: --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-cent-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.g --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginxwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-pcre-jit --with-debug --with-http_addition_module with-http_dav_module --with-http_flv_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_dule --with-http_mp4_module --with-http_perl_module --with-http_random_index_module --with-http_realip_module --with-http_sece_link_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-ipv--with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl --with-mail --with-mail_ssl_module --add-module=/tmp/buildd/inx-1.2.1/debian/modules/nginx-auth-pam --add-module=/tmp/buildd/nginx-1.2.1/debian/modules/chunkin-nginx-module --add-moduletmp/buildd/nginx-1.2.1/debian/modules/headers-more-nginx-module --add-module=/tmp/buildd/nginx-1.2.1/debian/modules/nginx-devopment-kit --add-module=/tmp/buildd/nginx-1.2.1/debian/modules/nginx-echo --add-module=/tmp/buildd/nginx-1.2.1/debian/modulesginx-http-push --add-module=/tmp/buildd/nginx-1.2.1/debian/modules/nginx-lua --add-module=/tmp/buildd/nginx-1.2.1/debian/modus/nginx-upload-module --add-module=/tmp/buildd/nginx-1.2.1/debian/modules/nginx-upload-progress --add-module=/tmp/buildd/ngin1.2.1/debian/modules/nginx-upstream-fair --add-module=/tmp/buildd/nginx-1.2.1/debian/modules/nginx-dav-ext-module
リバースプロキシとして利用する
headerについて
proxy_set_headerでHTTP Host headerをforwardする
proxy_set_header host $host;
### X-Forwarded-Host:オリジナルのホスト名。クライアントが Host リクエストヘッダで渡す
本当は以下のようにして、リバースプロキシであることがわかるようにするべき
proxy_set_header X-Forwarded-Host $host;
max_failsについて
ここで定義された回数の通信エラーが発生すると(次のfail_timeout引数で指定たれた時間内に)
Nginxはサーバが動作していないと判断する。デフォルト1回。0だとこのチェックを無視する。
(ここでいう通信エラーは proxy_next_upstreamとfastcgi_next_upstreamで定義されたもの。ただし、404エラーは含まない)
fail_timeoutについて
この間にmax_failsだけ通信エラーが発生すると、、サーバが動作していないとみなされる
みなされたら、この時間が終わるまでサーバはダウンしているとみなされる。デフォルト10s
コントロールするためには、proxy_connect_timeoutとproxy_read_timeoutを利用すべし
・proxy_connect_timeout(default:60s)
upstreamサーバとの接続タイムアウトを定義。75秒以上は設定することができない
サーバがページを返すまでの時間でないことに注意。(それは proxy_read_timeoutの仕事)
もしサーバが復旧して、ただスレッドがあがりきってなくてハングアップしたときなどはこのディレクティブは役に立たない
・proxy_read_timeout(default:60s)
このディレクティブはプロキシサーバが読むタイムアウト時間を設定する。nginxがレスポンスするまでにどれくらいの時間を待つか定義
・proxy_next_upstream
Default:error timeout
通信エラーもしくはタイムアウトで次のサーバに
参考URL
nginxでリバースプロキシ先にホスト名が引き継がれない
http://blog.fujimuradaisuke.com/post/12622482560/nginx
リバースプロキシのリクエストヘッダ
http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#x-headers
upstreamディレクティブ
http://wiki.nginx.org/NginxHttpUpstreamModule#upstream