SlideShare a Scribd company logo
第10回  静岡ITPro勉強会  インフラ部
nginx⼊入⾨門
滝澤  隆史
株式会社ハートビーツ  MSP事業部
所属
    http://heartbeats.jp/
1
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
私は誰
•  ⽒氏名:  滝澤  隆史  @ttkzw
•  所属:  株式会社ハートビーツ
▫  サーバの構築・運⽤用や
24時間365⽇日の有⼈人監視をやっている会社
▫  いわゆるMSP(マネージド  サービス  プロバイ
ダ)
•  nginxとの関わり
▫  所属会社の技術ブログ「nginx連載」
–  http://heartbeats.jp/hbblog/nginx/
▫  Software  Design  2012年年12⽉月号
第2特集「⾼高速・⾼高機能HTTPサーバ  Nginx構築・
設定マニュアル」
2
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
アジェンダ
•  nginxのインストール
•  nginxの設定
•  ウェブアプリケーションとの連携
3
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
本⽇日の勉強会の進め⽅方
•  セミナーではなく勉強会です。
•  随時質問を受け付けます。
•  質問がある⽅方は挙⼿手をお願いします。
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
4
5
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
インストール⽅方法
•  nginx公式パッケージ
•  OSやサードパーティのリポジトリ
•  ビルドしてインストール
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
6
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
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  Ports
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
8
ほとんどの環境
でパッケージは
存在する。
ビルドしてインストール
•  ビルドする必要があるケース
▫  提供されているパッケージに必要なモジュー
ルが組み込まれていない場合
▫  サードパーティモジュールを追加したい場合
▫  ちょっと古い環境でOpenSSL  1.0.1を使いた
い場合(SPDYやTLS  v1.1,v1.2対応のため)
▫  単にビルドしたい!
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
9
ビルドしてインストール
•  ./configureの時に組み込むモジュールを指定す
る。
▫  オプショナルモジュール
▫  サードパーティモジュール
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
10
./configure 

--with-http_XXXX_module 

--add-module=/path/to/module 

--with-openssl=/path/to/openssl-1.0.1e
ビルドしてインストール
•  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	
サードパーティ
モジュール
オプショナル
モジュール
モジュールの確認
•  "nginx  -‐‑‒V"で./configureのオプションが確認で
きる。
•  →オプショナルモジュールとサードパーティモ
ジュールの指定が確認できる。
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
12
公式パッケージのインストール例例
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
公式パッケージのインストール例例
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
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
15
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
16
設定ファイル
•  設定ファイル
▫  /etc/nginx/nginx.conf
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
17
./configure時に指定
includeディレクティブ
•  設定ファイル中にincludeディレクティブを使う
と他の設定ファイルを読み込むことができる
▫  include  /etc/nginx/conf.d/*.conf;
•  glob対応
▫  "*.conf"の形式が利利⽤用可能
▫  ただし、バージョン1.2.6以前では読む込む
ファイルの順番はソートされない
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
18
src/os/unix/ngx_̲files.c  の  ngx_̲open_̲glob()より
        n = glob((char *) gl->pattern, GLOB_NOSORT, NULL, &gl->pglob);
インストールされる設定ファイル
•  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
インストールされる設定ファイル
ファイル名 説明
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
インストールされる設定ファイル
ファイル名 説明
koi-‐‑‒utf ロシア語の⽂文字エンコーディングkoi8-‐‑‒rとUTF-‐‑‒8の⽂文字
コードのマッピングを⾏行行うファイル。
koi-‐‑‒win ロシア語の⽂文字エンコーディングwindows-‐‑‒1251とUTF-‐‑‒8
の⽂文字コードのマッピングを⾏行行うファイル。
win-‐‑‒utf ロシア語の⽂文字エンコーディングwindows-‐‑‒1251とUTF-‐‑‒8
の⽂文字コードのマッピングを⾏行行うファイル。
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
21
この3つのファイルは通常は使わない。
ロシア語の⽂文字エンコーディングの変換
を⾏行行う場合のみ利利⽤用。
インストールされる設定ファイル
•  ファイル名は特別な意味はない。
•  利利⽤用するには
▫  設定ファイルからincludeディレクティブによ
りこのファイル名を指定して読み込む
▫  例例
–  include /etc/nginx/mime.types;	
–  include mime.types;
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
22
nginx.confファイルのある
ディレクトリからの相対パス
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
23
ディレクティブ
•  設定ファイルにディレクティブ(設定の命令令)
を書くことにより設定を⾏行行う。
•  ディレクティブをどこにでも書けるわけではな
い。
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
24
events {	
	
}	
	
http {	
	
server {	
	
location URI_PATH {	
	
	
}	
location URI_PATH {	
...	
}	
...	
}	
	
server {	
...	
}	
}	 2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
25
mainコンテキスト
eventsコンテキスト
httpコンテキスト
serverコンテキスト
locationコンテキスト
主にプロセスの制御に関する設定
接続処理理に関する設定
HTTPサーバ全体の設定
バーチャルホスト毎の設定
URI毎の設定
nginx.conf
ディレクティブ毎に記述できる
コンテキストが決まっている。
www.example.org.conf
2013-‐‑‒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.conf
www.example.jp.conf
バーチャルサーバ毎の設定を
別ファイルにできる。
設定ファイルを書いてみよう
•  設定ファイルのサンプルを⾒見見ながら設定ファイ
ルを書いてみよう。
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
27
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⼊入⾨門
28
workerプロセスの実⾏行行権限のユーザー
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 process
nginx 27595 0.0 2.5 137880 25624 ? S 01:06 0:00 _ nginx: worker process
ファイルオープン数。
worker_connectionsの値以上を設定する。
events {	
worker_connections 1024;	
}	
eventsコンテキスト
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
29
⼀一つのworkerプロセスが同時に処理理でき
る最⼤大コネクション数。
リバースプロキシーとして動作する場合
はバックエンドとの接続数も含む。
デフォルト値は512。
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コンテキスト、その1
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
30
MIMEタイプの定義集を読み込む。
レスポンスのデフォルトのMIMEタイプ。
デフォルトはtext/plain
アクセスログの書式の定義。
アクセスログの出⼒力力先パスと書式名。
デフォルトの書式名は"combined"(apacheでよく使われるログの書式)
sendfile on;	
	
	
tcp_nopush on;	
	
	
keepalive_timeout 5;	
	
	
gzip on;	
gzip_types text/plain text/css application/json
application/x-javascript text/xml application/xml
application/xml+rss text/javascript;	
	
include /etc/nginx/conf.d/*.conf;	
}	
	
httpコンテキスト、その2
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
31
コンテンツのファイルの読み込みとクライアント
へのレスポンスの送信にsendfile()  APIを使うか
sendfileが有効なときにTCP_̲NOPUSHソケット
オプション(FreeBSD)やTCP_̲CORKソケット
オプション(Linux)を使うか。
キープアライブのタイムアウトの秒数。
デフォルトは75。
レスポンスのコンテンツを圧縮するか。
バーチャルホストの設定ファイル読み込み
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のパスをファイルシステム上
のパスに対応
listenディレクティブ
•  記述⽅方法
▫  listen  IPアドレス:ポート番号  オプション;
– IPアドレスのデフォルト値:  *
– ポート番号のデフォルト値:  80
– 主なオプション
– default_̲server
– ssl
– spdy
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
33
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
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
デフォルトサーバを指定しない
と、最初に⾒見見つかったサーバが
デフォルトサーバになる。
server_̲nameディレクティブ
•  記述⽅方法
▫  server_̲name  サーバ名  ...;
– デフォルト値:  ""
– ""はHostヘッダのないリクエストに対応
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
36
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⼊入⾨門
37
Hostヘッダなし
サーバ名に利利⽤用できない⽂文字なので、
デフォルトサーバにする場合に利利⽤用。
正規表現
部分⼀一致
部分⼀一致
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.jp
www.example.org
SSL/TLS対応にするときには、
SNI(Server  Name  Indication)⾮非対応の
ウェブブラウザが残っている限りは
IPベースのバーチャルホストにする必要あり。
SNI対応になれば名前ベースでよいのですが。
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.jp
www.example.org
デフォルトサーバ 名前ベースのバーチャルホスト
の場合はデフォルトサーバを明
⽰示的に設定し、誘導ページやエ
ラーページなどを表⽰示させる。
そうしないと、クライアントが
想定外のバーチャルホストの
ページに接続してしまうことが
発⽣生する。
$ nginx -V 2>&1 | grep SNI	
TLS SNI support enabled
SSL/TLS対応の複数の
バーチャルホストを設定
する場合にはnginxのSNI
対応が必要。
SSL/TLS
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
40
server {	
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以降降)
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のパスをファイルシステム上
のパスに対応
location  –  パス毎の設定
•  記述⽅方法
▫  location  プレフィックス  URIのパス  {
        locationコンテキスト
}
プレフィックス 評価⽅方法 説明
なし 前⽅方⼀一致
^~∼ 前⽅方⼀一致 評価を確定し、正規表現の評価を⾏行行わない。
= 前⽅方⼀一致 パス名が等しい場合(完全⼀一致)。
評価を確定し、正規表現の評価を⾏行行わない。
~∼ 正規表現 ⼤大⽂文字・⼩小⽂文字を区別する。
~∼* 正規表現 ⼤大⽂文字・⼩小⽂文字を区別しない。
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
42
②正規表現(プレフィックスが"~∼",  "~∼*")の評価
locationのURIパスの評価
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
43
①前⽅方⼀一致(プレフィックスが"=",  "^~∼",  なし)の評価
URIのパスが最⻑⾧長⼀一致するlocationを選定する。
(プレフィックスが"="であるものを優先)
選定したlocationが完全⼀一致でプレフィックスが"="である。
選定したlocationのプレフィックスが"^~∼"である。
正規表現のlocationを設定ファイルの出現順に評価する。
評
価
の
確
定
お
よ
び
終
了了
③前⽅方⼀一致の評価で選定されたlocationで評価を確定する。
正規表現に⼀一致する。
yes
yes
yes
no
no
no
locationのURIパスの評価
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
44
location / {	
[location A]	
}	
	
location /example/ {	
[location B]	
}	
どのlocationが適応される?
/example/page.html
locationのURIパスの評価
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
45
location / {	
[location A]	
}	
	
location /example/ {	
[location B]	
}	
どのlocationが適応される?
/example/page.html
前⽅方⼀一致の評価で最⻑⾧長⼀一致
locationのURIパスの評価
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
46
location / {	
[location A]	
}	
	
location = / {	
[location B]	
}	
	
location = /page.html {	
[location C]	
}	
	
どのlocationが適応される?
/
locationのURIパスの評価
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
47
location / {	
[location A]	
}	
	
location = / {	
[location B]	
}	
	
location = /page.html {	
[location C]	
}	
	
どのlocationが適応される?
/
前⽅方⼀一致の評価で完全⼀一致。
プレフィックス"="により評価
が確定。
locationのURIパスの評価
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
48
location / {	
[location A]	
}	
	
location = / {	
[location B]	
}	
	
location = /page.html {	
[location C]	
}	
	
どのlocationが適応される?
/page.html
locationのURIパスの評価
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
49
location / {	
[location A]	
}	
	
location = / {	
[location B]	
}	
	
location = /page.html {	
[location C]	
}	
	
どのlocationが適応される?
/page.html
前⽅方⼀一致の評価で完全⼀一致。
プレフィックス"="により
評価が確定。
locationのURIパスの評価
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
50
location / {	
[location A]	
}	
	
location /example/page.html {	
[location B]	
}	
	
location ~ ^/example/ {	
[location C]	
}	
どのlocationが適応される?
/example/page.html
locationのURIパスの評価
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
51
location / {	
[location A]	
}	
	
location /example/page.html {	
[location B]	
}	
	
location ~ ^/example/ {	
[location C]	
}	
どのlocationが適応される?
/example/page.html
正規表現の評価に⼀一致。
評価が確定。
前⽅方⼀一致の評価で最⻑⾧長⼀一致。
プレフィックスなしのため
評価は確定しない。
locationのURIパスの評価
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
52
location / {	
[location A]	
}	
	
location ^~ /example/page.html {	
[location B]	
}	
	
location ~ ^/example/ {	
[location C]	
}	
どのlocationが適応される?
/example/page.html
locationのURIパスの評価
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
53
location / {	
[location A]	
}	
	
location ^~ /example/page.html {	
[location B]	
}	
	
location ~ ^/example/ {	
[location C]	
}	
どのlocationが適応される?
/example/page.html
前⽅方⼀一致の評価で最⻑⾧長⼀一致。
プレフィックス"^~∼"により
評価が確定。
locationのURIパスの評価
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
54
location / {	
[location A]	
}	
	
location /example/ {	
[location B]	
}	
	
location ~ .php$ {	
[location C]	
}	
	
location ~ ^/example/.+.php$ {	
[location D]	
}	
どのlocationが適応される?
/example/index.php
locationのURIパスの評価
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
55
location / {	
[location A]	
}	
	
location /example/ {	
[location B]	
}	
	
location ~ .php$ {	
[location C]	
}	
	
location ~ ^/example/.+.php$ {	
[location D]	
}	
どのlocationが適応される?
/example/index.php
正規表現の評価は出現順。
正規表現の評価に⼀一致。
評価が確定。
前⽅方⼀一致の評価で最⻑⾧長⼀一致。
プレフィックスなしのため
評価は確定しない。
rootとalias
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
56
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;	
}	
ドキュメントルート
locationが正規表現で評価された場
合にグルーピングに⼀一致した⽂文字列列
は後⽅方参照できる。
aliasディレクティブ:
locationディレクティブで指定した
URIのパスをファイルシステム上の
パスに対応
rootディレクティブはlocationコ
ンテキストにも記述できる。
locationのパスは"/var/www/
images/画像ファイル"に対応す
る。
rootとalias
2013-‐‑‒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
ファイルシステム上のパスは?
rootとalias
2013-‐‑‒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
location /s/ {	
root /var/www/html/;	
}	
	
rootとalias
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
59
location /s/ {	
alias /var/www/html/s/;	
}	
URIのパスがファイルシステムのパ
スと⼀一致している場合はrootで書
き直した⽅方がわかりやすい。
アクセス制御、ベーシック認証
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
60
location ~ ^/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;	
}
ログ出⼒力力の抑制
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
61
location ~* .(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;	
}
•  以上の設定パラメータで静的ファイルのウェブ
サーバは運⽤用できる。
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
62
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
63
Webアプリケーションとの連携
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
64
Webブラウザ nginx
Web
アプリケーション
サーバ
http(s)
http(s)
FastCGI
SCGI
uWSGI
Webアプリ
Webアプリケーションサーバに対する
プロキシーサーバとして動作。
機能分担
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
65
Webブラウザ
nginx Web
アプリケーション
サーバ
動的コンテンツSSL/TLS処理理
静的コンテンツ
静的コンテンツはnginxが返し、
動的コンテンツはWebアプリケーション
サーバに対するプロキシーとして処理理する。
nginx側でSSL/TLSのオフロード処理理。
負荷分散
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
66
Webブラウザ nginx
リクエスト分散。
加重ラウンドロビン。
Web
アプリケーション
サーバ
Web
アプリケーション
サーバ
Web
アプリケーション
サーバ
基本的なパターン
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
67
location / {	
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
静的コンテンツ
名前付きロケーション。
内部リダイレクト⽤用に使⽤用。
基本的なパターン
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
68
upstream 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
の設定を⾏行行う。
名前付きロケーション。
内部リダイレクト⽤用に使⽤用。
proxy
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
69
location /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のヘッダとして
付与。
FastCGI
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
70
location ~ .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の共通設定を
記述した設定ファイルの読み
込み。
[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  +  CGI
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
71
location ~ .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:  9
uwsgi_̲paramの共通設定を記
述した設定ファイルの読み込み。
/etc/uwsgi.ini
uWSGI  +PSGI
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
72
location ~ .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:  9
uwsgi_̲paramの共通設定を記
述した設定ファイルの読み込み。
[uwsgi]	
中略略	
psgi	
chdir = /var/www/cgi-bin/mt	
mount = mt=mt.psgi	
	
/etc/uwsgi.ini
uWSGIに渡すパラメータ
2013-‐‑‒05-‐‑‒18nginx⼊入⾨門
73

More Related Content

nginx入門