nginx入門

38,039 views

Published on

第10回静岡ITPro勉強会インフラ部 「nginx入門」資料

Published in: Technology
0 Comments
156 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
38,039
On SlideShare
0
From Embeds
0
Number of Embeds
4,163
Actions
Shares
0
Downloads
297
Comments
0
Likes
156
Embeds 0
No embeds

No notes for slide

nginx入門

  1. 1. 第10回  静岡ITPro勉強会  インフラ部nginx⼊入⾨門滝澤  隆史株式会社ハートビーツ  MSP事業部所属    http://heartbeats.jp/12013-‐‑‒05-‐‑‒18nginx⼊入⾨門
  2. 2. 私は誰•  ⽒氏名:  滝澤  隆史  @ttkzw•  所属:  株式会社ハートビーツ▫  サーバの構築・運⽤用や24時間365⽇日の有⼈人監視をやっている会社▫  いわゆるMSP(マネージド  サービス  プロバイダ)•  nginxとの関わり▫  所属会社の技術ブログ「nginx連載」–  http://heartbeats.jp/hbblog/nginx/▫  Software  Design  2012年年12⽉月号第2特集「⾼高速・⾼高機能HTTPサーバ  Nginx構築・設定マニュアル」22013-‐‑‒05-‐‑‒18nginx⼊入⾨門
  3. 3. アジェンダ•  nginxのインストール•  nginxの設定•  ウェブアプリケーションとの連携32013-‐‑‒05-‐‑‒18nginx⼊入⾨門
  4. 4. 本⽇日の勉強会の進め⽅方•  セミナーではなく勉強会です。•  随時質問を受け付けます。•  質問がある⽅方は挙⼿手をお願いします。2013-‐‑‒05-‐‑‒18nginx⼊入⾨門4
  5. 5. 52013-‐‑‒05-‐‑‒18nginx⼊入⾨門
  6. 6. インストール⽅方法•  nginx公式パッケージ•  OSやサードパーティのリポジトリ•  ビルドしてインストール2013-‐‑‒05-‐‑‒18nginx⼊入⾨門6
  7. 7. nginx公式パッケージ•  ダウンロードサイト▫  http://nginx.org/en/download.html•  対応OS▫  Windows▫  Linux–  RHEL  5,  RHEL  6,  CentOS  5,  CentOS  6–  Debian  GNU/Linux–  Ubuntu•  使い⽅方▫  リポジトリを登録してyumやapt-‐‑‒getでパッケージをインストール2013-‐‑‒05-‐‑‒18nginx⼊入⾨門7
  8. 8. OSやサードパーティのリポジトリ•  Linuxディストリビューション▫  RHEL/CentOS  -‐‑‒  Fedora  EPEL▫  Fedora▫  Debian  GNU/Linux▫  Ubuntu▫  Gentoo  Portage•  *BSD、他▫  Mac  OS  X  -‐‑‒  homebrew▫  Mac  OS  X  -‐‑‒  MacPorts▫  FreeBSD  Ports▫  NetBSD  Packages  Collection▫  OpenBSD  Ports2013-‐‑‒05-‐‑‒18nginx⼊入⾨門8ほとんどの環境でパッケージは存在する。
  9. 9. ビルドしてインストール•  ビルドする必要があるケース▫  提供されているパッケージに必要なモジュールが組み込まれていない場合▫  サードパーティモジュールを追加したい場合▫  ちょっと古い環境でOpenSSL  1.0.1を使いたい場合(SPDYやTLS  v1.1,v1.2対応のため)▫  単にビルドしたい!2013-‐‑‒05-‐‑‒18nginx⼊入⾨門9
  10. 10. ビルドしてインストール•  ./configureの時に組み込むモジュールを指定する。▫  オプショナルモジュール▫  サードパーティモジュール2013-‐‑‒05-‐‑‒18nginx⼊入⾨門10./configure 
--with-http_XXXX_module 
--add-module=/path/to/module 
--with-openssl=/path/to/openssl-1.0.1e
  11. 11. ビルドしてインストール•  configureの例例2013-‐‑‒05-‐‑‒18nginx⼊入⾨門11./configure --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/var/run/nginx.pid --lock-path=/var/lock/subsys/nginx --user=nginx --group=nginx --with-file-aio --with-ipv6 --with-http_ssl_module --with-http_spdy_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --add-module=$HOME/src/ngx_cache_purge-2.1 --add-module=$HOME/src/ngx_devel_kit-0.2.18 --add-module=$HOME/src/lua-nginx-module-0.8.1 --add-module=$HOME/src/modsecurity-apache_2.7.3/nginx/modsecurity サードパーティモジュールオプショナルモジュール
  12. 12. モジュールの確認•  "nginx  -‐‑‒V"で./configureのオプションが確認できる。•  →オプショナルモジュールとサードパーティモジュールの指定が確認できる。2013-‐‑‒05-‐‑‒18nginx⼊入⾨門12
  13. 13. 公式パッケージのインストール例例CentOS  6の場合•  公式サイト▫  http://nginx.org/•  →  "download"▫  http://nginx.org/en/download.html•  →  "Linux  packages  for  stable  version"▫  http://nginx.org/en/linux_̲packages.html•  →  "CentOS  6"のリンクのRPMパッケージをインストール2013-‐‑‒05-‐‑‒18nginx⼊入⾨門13
  14. 14. 公式パッケージのインストール例例CentOS  6の場合2013-‐‑‒05-‐‑‒18nginx⼊入⾨門14$ sudo yum install http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm $ sudo yum install nginx $ sudo service nginx start
  15. 15. 2013-‐‑‒05-‐‑‒18nginx⼊入⾨門15
  16. 16. 2013-‐‑‒05-‐‑‒18nginx⼊入⾨門16
  17. 17. 設定ファイル•  設定ファイル▫  /etc/nginx/nginx.conf2013-‐‑‒05-‐‑‒18nginx⼊入⾨門17./configure時に指定
  18. 18. includeディレクティブ•  設定ファイル中にincludeディレクティブを使うと他の設定ファイルを読み込むことができる▫  include  /etc/nginx/conf.d/*.conf;•  glob対応▫  "*.conf"の形式が利利⽤用可能▫  ただし、バージョン1.2.6以前では読む込むファイルの順番はソートされない2013-‐‑‒05-‐‑‒18nginx⼊入⾨門18src/os/unix/ngx_̲files.c  の  ngx_̲open_̲glob()より        n = glob((char *) gl->pattern, GLOB_NOSORT, NULL, &gl->pglob);
  19. 19. インストールされる設定ファイル•  nginx.conf以外にもインストールされる設定ファイルがある。▫  $ ls -1 /etc/nginx
fastcgi.conf
fastcgi_params
koi-utf
koi-win
mime.types
nginx.conf
scgi_params
uwsgi_params
win-utf 2013-‐‑‒05-‐‑‒18nginx⼊入⾨門19
  20. 20. インストールされる設定ファイルファイル名 説明mime.types MIMEタイプと拡張⼦子の関連付けを定義したファイル。fastcgi_̲params FastCGI⽤用の変数を定義するファイル。fastcgi_̲paramディレクティブの設定集。fastcgi.conf fastcgi_̲paramsと同じ。パッケージによっては同梱されない場合もある。scgi_̲params SCGI⽤用の変数を定義するファイル。scgi_̲paramディレクティブによる設定集。uwsgi_̲params uWSGI⽤用の変数を定義するファイル。uwsgi_̲paramディレクティブによる設定集。2013-‐‑‒05-‐‑‒18nginx⼊入⾨門20
  21. 21. インストールされる設定ファイルファイル名 説明koi-‐‑‒utf ロシア語の⽂文字エンコーディングkoi8-‐‑‒rとUTF-‐‑‒8の⽂文字コードのマッピングを⾏行行うファイル。koi-‐‑‒win ロシア語の⽂文字エンコーディングwindows-‐‑‒1251とUTF-‐‑‒8の⽂文字コードのマッピングを⾏行行うファイル。win-‐‑‒utf ロシア語の⽂文字エンコーディングwindows-‐‑‒1251とUTF-‐‑‒8の⽂文字コードのマッピングを⾏行行うファイル。2013-‐‑‒05-‐‑‒18nginx⼊入⾨門21この3つのファイルは通常は使わない。ロシア語の⽂文字エンコーディングの変換を⾏行行う場合のみ利利⽤用。
  22. 22. インストールされる設定ファイル•  ファイル名は特別な意味はない。•  利利⽤用するには▫  設定ファイルからincludeディレクティブによりこのファイル名を指定して読み込む▫  例例–  include /etc/nginx/mime.types; –  include mime.types;2013-‐‑‒05-‐‑‒18nginx⼊入⾨門22nginx.confファイルのあるディレクトリからの相対パス
  23. 23. 2013-‐‑‒05-‐‑‒18nginx⼊入⾨門23
  24. 24. ディレクティブ•  設定ファイルにディレクティブ(設定の命令令)を書くことにより設定を⾏行行う。•  ディレクティブをどこにでも書けるわけではない。2013-‐‑‒05-‐‑‒18nginx⼊入⾨門24
  25. 25. events { } http { server { location URI_PATH { } location URI_PATH { ... } ... } server { ... } } 2013-‐‑‒05-‐‑‒18nginx⼊入⾨門25mainコンテキストeventsコンテキストhttpコンテキストserverコンテキストlocationコンテキスト主にプロセスの制御に関する設定接続処理理に関する設定HTTPサーバ全体の設定バーチャルホスト毎の設定URI毎の設定nginx.confディレクティブ毎に記述できるコンテキストが決まっている。
  26. 26. www.example.org.conf2013-‐‑‒05-‐‑‒18nginx⼊入⾨門26 events { } http { include conf.d/*.conf} mainコンテキストeventsコンテキストhttpコンテキストserver { location URI_PATH { } location URI_PATH { ... } ... } serverコンテキストlocationコンテキストserver { location URI_PATH { } location URI_PATH { ... } ... } serverコンテキストlocationコンテキストnginx.confwww.example.jp.confバーチャルサーバ毎の設定を別ファイルにできる。
  27. 27. 設定ファイルを書いてみよう•  設定ファイルのサンプルを⾒見見ながら設定ファイルを書いてみよう。2013-‐‑‒05-‐‑‒18nginx⼊入⾨門27
  28. 28. user nginx; worker_processes auto; worker_rlimit_nofile 2048; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; mainコンテキスト2013-‐‑‒05-‐‑‒18nginx⼊入⾨門28workerプロセスの実⾏行行権限のユーザーworkerのプロセス数。CPUのコア数を指定するとよい。1.2.5以降降で"auto"を指定可能。エラーログの出⼒力力先とロギングレベル。masterプロセスのプロセスIDを保存するファイル。$ ps auxf USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 27593 0.0 2.4 137552 24772 ? Ss 01:06 0:00 nginx: master process nginx 27594 0.0 2.5 137880 25624 ? S 01:06 0:00 _ nginx: worker processnginx 27595 0.0 2.5 137880 25624 ? S 01:06 0:00 _ nginx: worker processファイルオープン数。worker_connectionsの値以上を設定する。
  29. 29. events { worker_connections 1024; } eventsコンテキスト2013-‐‑‒05-‐‑‒18nginx⼊入⾨門29⼀一つのworkerプロセスが同時に処理理できる最⼤大コネクション数。リバースプロキシーとして動作する場合はバックエンドとの接続数も含む。デフォルト値は512。
  30. 30. http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for"; access_log /var/log/nginx/access.log main; httpコンテキスト、その12013-‐‑‒05-‐‑‒18nginx⼊入⾨門30MIMEタイプの定義集を読み込む。レスポンスのデフォルトのMIMEタイプ。デフォルトはtext/plainアクセスログの書式の定義。アクセスログの出⼒力力先パスと書式名。デフォルトの書式名は"combined"(apacheでよく使われるログの書式)
  31. 31. sendfile on; tcp_nopush on; keepalive_timeout 5; gzip on; gzip_types text/plain text/css application/jsonapplication/x-javascript text/xml application/xmlapplication/xml+rss text/javascript; include /etc/nginx/conf.d/*.conf; } httpコンテキスト、その22013-‐‑‒05-‐‑‒18nginx⼊入⾨門31コンテンツのファイルの読み込みとクライアントへのレスポンスの送信にsendfile()  APIを使うかsendfileが有効なときにTCP_̲NOPUSHソケットオプション(FreeBSD)やTCP_̲CORKソケットオプション(Linux)を使うか。キープアライブのタイムアウトの秒数。デフォルトは75。レスポンスのコンテンツを圧縮するか。バーチャルホストの設定ファイル読み込み
  32. 32. server { listen 80; server_name example.jp; root /var/www/html; index index.html index.php; location / { } location /images/ { alias /var/www/images/; } } serverコンテキスト2013-‐‑‒05-‐‑‒18nginx⼊入⾨門32リクエストを受け付けるIPアドレスやポート番号バーチャルホストの名前バーチャルホスト(バーチャルサーバ)毎の設定を記述する。ドキュメントルートURIパス毎の設定パスが"/"で終わる場合に表⽰示するファイル。locationディレクティブで指定したURIのパスをファイルシステム上のパスに対応
  33. 33. listenディレクティブ•  記述⽅方法▫  listen  IPアドレス:ポート番号  オプション;– IPアドレスのデフォルト値:  *– ポート番号のデフォルト値:  80– 主なオプション– default_̲server– ssl– spdy2013-‐‑‒05-‐‑‒18nginx⼊入⾨門33
  34. 34. listenディレクティブ•  記述例例▫  インターフェイスすべて–  listen *:80; –  listen 80; –  listen *; ▫  IPv4–  listen 192.0.2.1:80; –  listen 192.0.2.1;▫  IPv6–  listen [2001:db8:dead:beef::1]:80;2013-‐‑‒05-‐‑‒18nginx⼊入⾨門34
  35. 35. listenディレクティブ•  記述例例▫  SSL/TLS–  listen 443 ssl; –  listen 192.0.2.1:443 ssl; –  listen [2001:db8:dead:beef::1]:443 ssl; ▫  SPDY–  listen 443 ssl spdy; –  listen 192.0.2.1:443 ssl spdy; –  listen [2001:db8:dead:beef::1]:443 ssl spdy;▫  デフォルトサーバ–  listen 80 default_server; –  listen 443 default_server ssl; 2013-‐‑‒05-‐‑‒18nginx⼊入⾨門35デフォルトサーバを指定しないと、最初に⾒見見つかったサーバがデフォルトサーバになる。
  36. 36. server_̲nameディレクティブ•  記述⽅方法▫  server_̲name  サーバ名  ...;– デフォルト値:  ""– ""はHostヘッダのないリクエストに対応2013-‐‑‒05-‐‑‒18nginx⼊入⾨門36
  37. 37. server_̲nameディレクティブ•  記述例例▫  server_̲name  example.com;▫  server_̲name  example.com  www.example.com;▫  server_̲name  *.example.com;▫  server_̲name  .example.com;▫  server_̲name  ~∼^wwwd+.example.com$;▫  server_̲name  "";▫  server_̲name  _̲;2013-‐‑‒05-‐‑‒18nginx⼊入⾨門37Hostヘッダなしサーバ名に利利⽤用できない⽂文字なので、デフォルトサーバにする場合に利利⽤用。正規表現部分⼀一致部分⼀一致
  38. 38. server { listen 192.0.2.1:80; listen 192.0.2.1:443 ssl; server_name example.jp; .... } server { listen 192.0.2.2:80; listen 192.0.2.2:443 ssl; server_name www.example.org; .... } IPベースのバーチャルホストの記述例例2013-‐‑‒05-‐‑‒18nginx⼊入⾨門38設定はSSL/TLSと併⽤用できる。example.jpwww.example.orgSSL/TLS対応にするときには、SNI(Server  Name  Indication)⾮非対応のウェブブラウザが残っている限りはIPベースのバーチャルホストにする必要あり。SNI対応になれば名前ベースでよいのですが。
  39. 39. server { listen 80 default_server; server_name _; .... } server { listen 80; server_name example.jp www.example.jp; .... } server { listen 80; listen 443 ssl; server_name www.example.org; .... } 名前ベースのバーチャルホストの記述例例2013-‐‑‒05-‐‑‒18nginx⼊入⾨門39設定はSSL/TLSと併⽤用できる。example.jpwww.example.orgデフォルトサーバ 名前ベースのバーチャルホストの場合はデフォルトサーバを明⽰示的に設定し、誘導ページやエラーページなどを表⽰示させる。そうしないと、クライアントが想定外のバーチャルホストのページに接続してしまうことが発⽣生する。$ nginx -V 2>&1 | grep SNI TLS SNI support enabledSSL/TLS対応の複数のバーチャルホストを設定する場合にはnginxのSNI対応が必要。
  40. 40. SSL/TLS2013-‐‑‒05-‐‑‒18nginx⼊入⾨門40server { listen 443 ssl spdy; server_name example.jp; ssl_certificate /etc/nginx/cert.pem; ssl_certificate_key /etc/nginx/cert.key; ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; } SSL/TLS対応サーバ証明書、中間証明書をこの順に1つのファイルに。プライベート鍵サーバ証明書のCNと同じ名前SSL/TLSプロトコルバージョン(TLSv1.1,TLSv1.2はOpenSSL  1.0.1以降降)暗号スイートopenssl  ciphers  cipherlist    暗号スイート  -‐‑‒vセッションキャッシュSPDY対応(nginx  1.4.0以降降、OpenSSL  1.0.1以降降)
  41. 41. server { listen 80; server_name example.jp; root /var/www/html; index index.html index.php; location / { } location /images/ { alias /var/www/images/; } } serverコンテキスト(再掲)2013-‐‑‒05-‐‑‒18nginx⼊入⾨門41リクエストを受け付けるIPアドレスやポート番号バーチャルホストの名前バーチャルホスト(バーチャルサーバ)毎の設定を記述する。ドキュメントルートURIパス毎の設定パスが"/"で終わる場合に表⽰示するファイル。locationディレクティブで指定したURIのパスをファイルシステム上のパスに対応
  42. 42. location  –  パス毎の設定•  記述⽅方法▫  location  プレフィックス  URIのパス  {        locationコンテキスト}プレフィックス 評価⽅方法 説明なし 前⽅方⼀一致^~∼ 前⽅方⼀一致 評価を確定し、正規表現の評価を⾏行行わない。= 前⽅方⼀一致 パス名が等しい場合(完全⼀一致)。評価を確定し、正規表現の評価を⾏行行わない。~∼ 正規表現 ⼤大⽂文字・⼩小⽂文字を区別する。~∼* 正規表現 ⼤大⽂文字・⼩小⽂文字を区別しない。2013-‐‑‒05-‐‑‒18nginx⼊入⾨門42
  43. 43. ②正規表現(プレフィックスが"~∼",  "~∼*")の評価locationのURIパスの評価2013-‐‑‒05-‐‑‒18nginx⼊入⾨門43①前⽅方⼀一致(プレフィックスが"=",  "^~∼",  なし)の評価URIのパスが最⻑⾧長⼀一致するlocationを選定する。(プレフィックスが"="であるものを優先)選定したlocationが完全⼀一致でプレフィックスが"="である。選定したlocationのプレフィックスが"^~∼"である。正規表現のlocationを設定ファイルの出現順に評価する。評価の確定および終了了③前⽅方⼀一致の評価で選定されたlocationで評価を確定する。正規表現に⼀一致する。yesyesyesnonono
  44. 44. locationのURIパスの評価2013-‐‑‒05-‐‑‒18nginx⼊入⾨門44location / { [location A] } location /example/ { [location B] } どのlocationが適応される?/example/page.html
  45. 45. locationのURIパスの評価2013-‐‑‒05-‐‑‒18nginx⼊入⾨門45location / { [location A] } location /example/ { [location B] } どのlocationが適応される?/example/page.html前⽅方⼀一致の評価で最⻑⾧長⼀一致
  46. 46. locationのURIパスの評価2013-‐‑‒05-‐‑‒18nginx⼊入⾨門46location / { [location A] } location = / { [location B] } location = /page.html { [location C] } どのlocationが適応される?/
  47. 47. locationのURIパスの評価2013-‐‑‒05-‐‑‒18nginx⼊入⾨門47location / { [location A] } location = / { [location B] } location = /page.html { [location C] } どのlocationが適応される?/前⽅方⼀一致の評価で完全⼀一致。プレフィックス"="により評価が確定。
  48. 48. locationのURIパスの評価2013-‐‑‒05-‐‑‒18nginx⼊入⾨門48location / { [location A] } location = / { [location B] } location = /page.html { [location C] } どのlocationが適応される?/page.html
  49. 49. locationのURIパスの評価2013-‐‑‒05-‐‑‒18nginx⼊入⾨門49location / { [location A] } location = / { [location B] } location = /page.html { [location C] } どのlocationが適応される?/page.html前⽅方⼀一致の評価で完全⼀一致。プレフィックス"="により評価が確定。
  50. 50. locationのURIパスの評価2013-‐‑‒05-‐‑‒18nginx⼊入⾨門50location / { [location A] } location /example/page.html { [location B] } location ~ ^/example/ { [location C] } どのlocationが適応される?/example/page.html
  51. 51. locationのURIパスの評価2013-‐‑‒05-‐‑‒18nginx⼊入⾨門51location / { [location A] } location /example/page.html { [location B] } location ~ ^/example/ { [location C] } どのlocationが適応される?/example/page.html正規表現の評価に⼀一致。評価が確定。前⽅方⼀一致の評価で最⻑⾧長⼀一致。プレフィックスなしのため評価は確定しない。
  52. 52. locationのURIパスの評価2013-‐‑‒05-‐‑‒18nginx⼊入⾨門52location / { [location A] } location ^~ /example/page.html { [location B] } location ~ ^/example/ { [location C] } どのlocationが適応される?/example/page.html
  53. 53. locationのURIパスの評価2013-‐‑‒05-‐‑‒18nginx⼊入⾨門53location / { [location A] } location ^~ /example/page.html { [location B] } location ~ ^/example/ { [location C] } どのlocationが適応される?/example/page.html前⽅方⼀一致の評価で最⻑⾧長⼀一致。プレフィックス"^~∼"により評価が確定。
  54. 54. locationのURIパスの評価2013-‐‑‒05-‐‑‒18nginx⼊入⾨門54location / { [location A] } location /example/ { [location B] } location ~ .php$ { [location C] } location ~ ^/example/.+.php$ { [location D] } どのlocationが適応される?/example/index.php
  55. 55. locationのURIパスの評価2013-‐‑‒05-‐‑‒18nginx⼊入⾨門55location / { [location A] } location /example/ { [location B] } location ~ .php$ { [location C] } location ~ ^/example/.+.php$ { [location D] } どのlocationが適応される?/example/index.php正規表現の評価は出現順。正規表現の評価に⼀一致。評価が確定。前⽅方⼀一致の評価で最⻑⾧長⼀一致。プレフィックスなしのため評価は確定しない。
  56. 56. rootとalias2013-‐‑‒05-‐‑‒18nginx⼊入⾨門56root /var/www/html; location ~ ^/.+.(?:gif|jpg|png)$ { root /var/www/images; } location /s/ { alias /var/www/s/html/; } location ~ ^/s/(.+.(?:gif|jpg|png)$) { alias /var/www/s/images/$1; } ドキュメントルートlocationが正規表現で評価された場合にグルーピングに⼀一致した⽂文字列列は後⽅方参照できる。aliasディレクティブ:locationディレクティブで指定したURIのパスをファイルシステム上のパスに対応rootディレクティブはlocationコンテキストにも記述できる。locationのパスは"/var/www/images/画像ファイル"に対応する。
  57. 57. rootとalias2013-‐‑‒05-‐‑‒18nginx⼊入⾨門57 root /var/www/html; location ~ ^/.+.(?:gif|jpg|png)$ { root /var/www/images; } location /s/ { alias /var/www/s/html/; } location ~ ^/s/(.+.(?:gif|jpg|png)$) { alias /var/www/s/images/$1; } ①  /page.html②  /file.jpg③  /s/page.html④  /s/file.jpgファイルシステム上のパスは?
  58. 58. rootとalias2013-‐‑‒05-‐‑‒18nginx⼊入⾨門58 root /var/www/html; location ~ ^/.+.(?:gif|jpg|png)$ { root /var/www/images; } location /s/ { alias /var/www/s/html/; } location ~ ^/s/(.+.(?:gif|jpg|png)$) { alias /var/www/s/images/$1; } ①  /page.html②  /file.jpg③  /s/page.html④  /s/file.jpgファイルシステム上のパスは?/var/www/html/page.html/var/www/images/file.jpg/var/www/s/html/page.html/var/www/s/images/file.jpg
  59. 59. location /s/ { root /var/www/html/; } rootとalias2013-‐‑‒05-‐‑‒18nginx⼊入⾨門59location /s/ { alias /var/www/html/s/; } URIのパスがファイルシステムのパスと⼀一致している場合はrootで書き直した⽅方がわかりやすい。
  60. 60. アクセス制御、ベーシック認証2013-‐‑‒05-‐‑‒18nginx⼊入⾨門60location ~ ^/admin/ { satisfy any; allow 127.0.0.1; allow ::1; allow 192.0.2.1; allow 2001:db8:dead:beef::1; deny all; auth_basic on; auth_basic_user_file auth/htpasswd-admin; } location ~ /. { deny all; log_not_found off; access_log off; }
  61. 61. ログ出⼒力力の抑制2013-‐‑‒05-‐‑‒18nginx⼊入⾨門61location ~* .(js|css|png|jpg|jpeg|gif|ico)$ { log_not_found off; access_log off; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { log_not_found off; access_log off; }
  62. 62. •  以上の設定パラメータで静的ファイルのウェブサーバは運⽤用できる。2013-‐‑‒05-‐‑‒18nginx⼊入⾨門62
  63. 63. 2013-‐‑‒05-‐‑‒18nginx⼊入⾨門63
  64. 64. Webアプリケーションとの連携2013-‐‑‒05-‐‑‒18nginx⼊入⾨門64Webブラウザ nginxWebアプリケーションサーバhttp(s)http(s)FastCGISCGIuWSGIWebアプリWebアプリケーションサーバに対するプロキシーサーバとして動作。
  65. 65. 機能分担2013-‐‑‒05-‐‑‒18nginx⼊入⾨門65Webブラウザnginx Webアプリケーションサーバ動的コンテンツSSL/TLS処理理静的コンテンツ静的コンテンツはnginxが返し、動的コンテンツはWebアプリケーションサーバに対するプロキシーとして処理理する。nginx側でSSL/TLSのオフロード処理理。
  66. 66. 負荷分散2013-‐‑‒05-‐‑‒18nginx⼊入⾨門66Webブラウザ nginxリクエスト分散。加重ラウンドロビン。WebアプリケーションサーバWebアプリケーションサーバWebアプリケーションサーバ
  67. 67. 基本的なパターン2013-‐‑‒05-‐‑‒18nginx⼊入⾨門67location / { try_files $uri $uri/ @webapp; } location /images/ { root /var/www/html/webapps; } location @webapp { proxy_pass http://127.0.0.1:8080/; } location ~ .cgi$ { proxy_pass http://127.0.0.1:8080/; } 指定したURIパスがあればそれを返し、なければ最後に記述したURIに内部リダイレクトする。動的コンテンツ。PATH_̲INFO形式と判断し、バックエンドに渡す。静的コンテンツバックエンドURI動的コンテンツバックエンドURI静的コンテンツ名前付きロケーション。内部リダイレクト⽤用に使⽤用。
  68. 68. 基本的なパターン2013-‐‑‒05-‐‑‒18nginx⼊入⾨門68upstream backend { ip_hash; server backend1.example.jp:8080 weight=5; server backend2.example.jp:8080; server unix:/var/run/backend.sock; } server { location / { try_files $uri $uri/ @webapp; } location @webapp { proxy_pass backend; } location ~ .cgi$ { proxy_pass backend; } } バックエンドの細かい制御をしたいときにはupstreamの設定を⾏行行う。名前付きロケーション。内部リダイレクト⽤用に使⽤用。
  69. 69. proxy2013-‐‑‒05-‐‑‒18nginx⼊入⾨門69location /webapp/ { proxy_pass http://192.0.2.1:8080/; proxy_set_header Host $host; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_redirect off; } バックエンドサーバのURIバックエンドサーバに渡す情報をHTTPのヘッダとして付与。
  70. 70. FastCGI2013-‐‑‒05-‐‑‒18nginx⼊入⾨門70location ~ .php$ { fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; } バックエンドサーバのURIまたはソケットFastCGIサーバに渡すファイル名fastcgi_̲paramの共通設定を記述した設定ファイルの読み込み。
  71. 71. [uwsgi] master = true workers = 5 no-orphans = true pidfile = /var/run/uwsgi/uwsgi.pid socket = /var/run/uwsgi/uwsgi.sock chmod-socket = 660 uid = nginx gid = nginx cgi = /mt=/var/www/cgi-bin/mt cgi-allowed-ext = .cgi uWSGI  +  CGI2013-‐‑‒05-‐‑‒18nginx⼊入⾨門71location ~ .cgi$ { uwsgi_pass unix:/var/run/uwsgi/uwsgi.sock; uwsgi_modifier1 9; include /etc/nginx/uwsgi_params; } バックエンドサーバのURIまたはソケットuwsgiプロトコルのパケットヘッダのmodifier1の値。WSGI:  0、PSGI:  5、CGI:  9uwsgi_̲paramの共通設定を記述した設定ファイルの読み込み。/etc/uwsgi.ini
  72. 72. uWSGI  +PSGI2013-‐‑‒05-‐‑‒18nginx⼊入⾨門72location ~ .cgi$ { uwsgi_pass unix:/var/run/uwsgi/uwsgi.sock; uwsgi_modifier1 5; uwsgi_param UWSGI_APPID mt; uwsgi_param UWSGI_SCRIPT mt.psgi; include /etc/nginx/uwsgi_params; } バックエンドサーバのURIまたはソケットuwsgiプロトコルのパケットヘッダのmodifier1の値。WSGI:  0、PSGI:  5、CGI:  9uwsgi_̲paramの共通設定を記述した設定ファイルの読み込み。[uwsgi] 中略略 psgi chdir = /var/www/cgi-bin/mt mount = mt=mt.psgi /etc/uwsgi.iniuWSGIに渡すパラメータ
  73. 73. 2013-‐‑‒05-‐‑‒18nginx⼊入⾨門73

×