nginx-基礎知識-

  • 投稿者:
  • 投稿カテゴリー:nginx

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