第2回勉強会資料 岩本(配布用)

37
Nginx ののののの ののののののののののの WEB ののの

description

 

Transcript of 第2回勉強会資料 岩本(配布用)

Page 1: 第2回勉強会資料 岩本(配布用)

Nginxのおはなし

いらちな現代人のためのWEBサーバ

Page 2: 第2回勉強会資料 岩本(配布用)

とりあえず自己紹介

名前 岩本 貴久 所属 株式会社ビヨンド 生息地 おなか吹田市 仕事 セールスエンジニア

年齢  31歳

インテリアが大好き 「いわもん」と呼ばれたり呼ばれなかったり 好きな食べ物 パイナップル ラムネ 鶏肉 好きな観光地 自宅 (引きこもり )

Page 3: 第2回勉強会資料 岩本(配布用)

いらちな人々

2009年  Akamai社の調査結果

Q1:WEBサイトの表示にどれぐらい時間がかかると「遅い」と感じるか?

A1:約半数のユーザーは、ページ表示の待ち時間が 2秒を超えるとイライラし始める。

Q2:WEBサイトの読み込みが何秒で終わることを期待するか?

A2:47%の消費者が「 2秒」と回答。

2006年の調査では 4秒という判断であり、3年でユーザーはかなりせっかちになっている。

Page 4: 第2回勉強会資料 岩本(配布用)

サイトを高速化する理由

コンバージョン率の最適化

カスタマーエクスペリエンスとカスタマー満足度の向上

直帰率を下げる。

競争率が非常に激しいキーワードでオーガニックからのトラフィックを増やす。

全体的な競争力を高める。

運用費を節約する。

Page 5: 第2回勉強会資料 岩本(配布用)

数字で見るページスピード

Googleではページスピードが検索の 1%に影響している。

ユーザーがページ表示に待てるのは 2秒まで。

3秒以上かかると 40%以上のユーザーは離脱する。

表示が 1秒遅れるごとにコンバージョン率は 7%落ちる。

表示が 1秒遅れるごとに顧客満足度は 16%落ちる。

速いサイトはインフラにかかるコストを50%かそれ以上削減する。

Page 6: 第2回勉強会資料 岩本(配布用)

つまり 早いは正義!( ー `д ー ´) キリッ

Page 7: 第2回勉強会資料 岩本(配布用)

じゃあ早くするよ

インフラ面で考えてみる

サーバ・ネットワークを増強 ⇒ お金がかかります

(ミドルウェアの )チューニング ⇒ 効果が薄い

根本的に早くするには、WEBサーバを入れ替えてしまえ!!

⇒ Nginxが早いらしい!!

(*´∀ ` *) ポワワ

Page 8: 第2回勉強会資料 岩本(配布用)

ここまで、前振り。

で、本題です。

本当の戦いはこれからだっ!!

Page 9: 第2回勉強会資料 岩本(配布用)

本日のアジェンダ

Nginxとは?

とりあえず、インストール

Apacheとの違い

ベンチマーク!

php-cgiを分離してみる

今日のまとめっ!

Page 10: 第2回勉強会資料 岩本(配布用)

Nginxとは?1

「えんじんえっくす」と読みます。

特徴 高い並列性 処理性能 メモリ使用量の少なさ 処理が軽い 大量リクエストの処理にも向いている

他にも リバースプロキシ メールプロキシ ロードバランサ WAF

Page 11: 第2回勉強会資料 岩本(配布用)

Nginxとは?2

採用サービス

クックパッド

サイバーエージェント

Wikipedia

Facebook

Hulu

DropBox

グルーポン

Page 12: 第2回勉強会資料 岩本(配布用)

Nginxとは?3

Developer July 2013 PercentAugust 2013

Percent Change

Apache364,696,79

252.19%

336,622,050

46.96% -5.23

Microsoft137,351,21

119.65%

163,098,703

22.75% 3.10

nginx 95,017,255 13.60%104,311,56

814.55% 0.96

Google 27,406,059 3.92% 30,550,914 4.26% 0.34

Netcraft 社調査

WEB サーバのシェア

Page 13: 第2回勉強会資料 岩本(配布用)

とりあえずインストール1

要件

Nginxはソースインストール

PHPは Fast-CGIで実行し、Nginx⇔PHP間は Fast-CGI+UnixSocketで通信する

Page 14: 第2回勉強会資料 岩本(配布用)

とりあえずインストール2

php-fpmのインストール# yum install php php-devel php-fpm # chkconfig php-fpm on

php-fpm の設定# vim /etc/php-fpm.d/www.conf # UnixSocketで通信listen = /var/run/php-fpm/www.sock user = nginxgroup = nginx

php-fpmの起動# /etc/init.d/php-fpm start

Page 15: 第2回勉強会資料 岩本(配布用)

とりあえずインストール3

Nginx のインストール

必要モジュールのインストール# yum install pcre pcre-devel openssl openssl-devel gcc

ユーザの追加# useradd –s /sbin/nologin –d /usr/local/nginx -M nginx

ソースからのインストール# cd /usr/local/src# wget http://nginx.org/download/nginx-1.2.3.tar.gz# tar zxvf nginx-1.2.3.tar.gz# cd nginx-1.2.3# ./configure --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module# make# make install

Page 16: 第2回勉強会資料 岩本(配布用)

とりあえずインストール4

logrotateの設定 # vim /etc/logrotated/nginx

/var/log/nginx/*log {missingok

NotifemptySharedscriptsrotate 12WeeklyCompressPostrotatekill -USR1 `cat /var/run/nginx.pid`Endscript}

Page 17: 第2回勉強会資料 岩本(配布用)

とりあえずインストール5

起動スクリプト# vim /etc/init.d/niginx

~長くて収まりませんでした。 m(_ _)m ~

起動スクリプトのパーミッションの変更# chmod 755 /etc/init.d/niginx

nginx.sh

Page 18: 第2回勉強会資料 岩本(配布用)

とりあえずインストール6

コンフィグ設定# vim /usr/local/nginx/conf/nginx.conf

~長くて収まりませんでした。 m(_ _)m ~

Nginxの起動# /etc/init.d/nginx start

nginx.conf

Page 19: 第2回勉強会資料 岩本(配布用)

とりあえずインストール7

nginx.confの要点 1

worker_processes 8;# CPUコア数に揃える

worker_rlimit_nofile 8192;#ファイルの同時オープン数 (ApacheのMaxClients)

worker_connections 8192;# workerの同時接続数 (ApacheのMaxClients)

server_tokens off;#Apacheの ServerTokens と同じ

Page 20: 第2回勉強会資料 岩本(配布用)

とりあえずインストール8

nginx.confの要点 2

sendfile on;#ファイル読み書きの効率化

tcp_nopush# sendfile が onの時、パケットの効率化

keepalive_timeout 0;#Apacheの Keepaliveと同じ (0 = off)

Page 21: 第2回勉強会資料 岩本(配布用)

とりあえずインストール9

nginx.confの要点 3

location ~ \.php$ { include

/usr/local/nginx/conf/fastcgi_params; fastcgi_pass unix:/tmp/php.socket; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME

/var/www/vhosts/beyondjapan.com$fastcgi_script_name;

} # fcgiを使う設定

Page 22: 第2回勉強会資料 岩本(配布用)

とりあえずインストール10

今まで内容を⇓

Ctrl +A :全選択⇓

Ctrl +C :コピー⇓

Ctrl +V :ペースト⇓

以上っ!ヽ (*´∀ ` ) ノ キャッホーイ !!

Page 23: 第2回勉強会資料 岩本(配布用)

Apacheとの違い 1

.htacsess が使えない

mod_phpが使えない

Rewriteの記述が変わる

プロセス型とスレッド型

Page 24: 第2回勉強会資料 岩本(配布用)

Apacheとの違い 2

htacsess が使えない⇒  confにベタ書きしか方法が。 ( 要再起動 )

mod_phpが使えない⇒  fast-cgiを使って下さい。

Page 25: 第2回勉強会資料 岩本(配布用)

Apacheとの違い 3

Rewriteの記述が変わる

Apache<IfModule mod_rewrite.c>

RewriteEngine on

RewriteCond %{HTTP_HOST} ^beyondjapan\.com$ [NC]

RewriteRule ^(.*)$ http://www.beyondjapan.com/$1 [R=301,L]

</IfModule>

⇓あら簡単

Nginxserver {

server_name beyondjapan.com;

rewrite ^(.*)$ http://www.beyondjapan.com$1 ;

}

Page 26: 第2回勉強会資料 岩本(配布用)

Apacheとの違い 4

プロセス型とスレッド型

Apache プロセスで処理 プロセス駆動アーキテクチャ リクエストが大量に来た際、プロセスが同時起動するのでオーバヘッドが大きくなるデメリット

Nginx スレッドで処理 イベント駆動アーキテクチャ 1つの処理時間が長くなる処理を実行した際、そこでプロセスがブロックされ処理能力が低下する

つまり、大量アクセスにはNginx、1処理が重いなら Apache

Page 27: 第2回勉強会資料 岩本(配布用)

みんな大好きベンチマーク

ベンチマーク環境

AWS EC2 (AmazonLinux) + Wordpress

AWS RDS

Page 28: 第2回勉強会資料 岩本(配布用)

みんな大好きベンチマーク

:20リクエスト回数 :50リクエスト回数 :100リクエスト回数 :200リクエスト回数 :400リクエスト回数

Apache 35 ミリ秒 36 ミリ秒 60 ミリ秒 122 ミリ秒 250 ミリ秒

Nginx 35 ミリ秒 37 ミリ秒 43 ミリ秒 40 ミリ秒 57 ミリ秒

リクエスト回数

:20

リクエスト回数

:50

リクエスト回数

:100

リクエスト回数

:200

リクエスト回数

:400

0 ミリ秒

50 ミリ秒

100 ミリ秒

150 ミリ秒

200 ミリ秒

250 ミリ秒

300 ミリ秒

ab 結果 静的コンテンツ

Apache Nginx

Page 29: 第2回勉強会資料 岩本(配布用)

みんな大好きベンチマーク

:20リクエスト回数 :50リクエスト回数 :100リクエスト回数 :200リクエスト回数 :400リクエスト回数

Apache 3005 ミリ秒 7344 ミリ秒 12718 ミリ秒 19524 ミリ秒 41889 ミリ秒

Nginx 3193 ミリ秒 6115 ミリ秒 9401 ミリ秒 17752 ミリ秒 48944 ミリ秒

リクエスト回数

:20

リクエスト回数

:50

リクエスト回数

:100

リクエスト回数

:200

リクエスト回数

:400

0 ミリ秒

10000 ミリ秒

20000 ミリ秒

30000 ミリ秒

40000 ミリ秒

50000 ミリ秒

60000 ミリ秒

ab 結果 動的コンテンツ

Apache Nginx

Page 30: 第2回勉強会資料 岩本(配布用)

php-cgiを分離してみる1

ベンチマーク環境

AWS EC2 (AmazonLinux) + Wordpress

AWS EC2   php-fpm用

AWS RDS 

Page 31: 第2回勉強会資料 岩本(配布用)

php-cgiを分離してみる2

php-fpm ; listen = /var/run/php-fpm/www.sock listen = 0.0.0.0:9000

; listen.allowed_clients = 127.0.0.1 コメントアウト

Nginx #fastcgi_pass unix:/tmp/php.socket; fastcgi_pass 192.168.101.20:9000;

Page 32: 第2回勉強会資料 岩本(配布用)

php-cgiを分離してみる3

リクエスト回数

:20

リクエスト回数

:50

リクエスト回数

:100

リクエスト回数

:200

リクエスト回数

:400

0 ミリ秒

10000 ミリ秒

20000 ミリ秒

30000 ミリ秒

40000 ミリ秒

50000 ミリ秒

60000 ミリ秒

ab 結果 動的コンテンツ

Apache Nginx Nginx+php-fpm

:20リクエスト回数 :50リクエスト回数 :100リクエスト回数 :200リクエスト回数 :400リクエスト回数

Apache 3005 ミリ秒 7344 ミリ秒 12718 ミリ秒 19524 ミリ秒 41889 ミリ秒

Nginx 3193 ミリ秒 6115 ミリ秒 9401 ミリ秒 17752 ミリ秒 48944 ミリ秒

Nginx+php-fpm 1985 ミリ秒 4198 ミリ秒 9309 ミリ秒 25010 ミリ秒 41538 ミリ秒

Page 33: 第2回勉強会資料 岩本(配布用)

php-cgiを分離してみる4

あれ・・・? ( ゚ д ゚ ) ポカーン

Page 34: 第2回勉強会資料 岩本(配布用)

php-cgiを分離してみる5

理想 PHPとWEBを分けたから、倍の速度出るだろう

+ ( 0 ゚・∀・) + ワクテカ +

現実 1 台構成と大差ない (´Д`|||) ドヨーン

Page 35: 第2回勉強会資料 岩本(配布用)

php-cgiを分離してみる5

この後、 Nginx+php-fpm 構成 x2 とNginx x1 + php-fpmx1 構成のベンチマークを考えていたけど 

割愛

Page 36: 第2回勉強会資料 岩本(配布用)

本日のまとめっ!

Nginxは静的コンテンツ爆速

特に、大量アクセスだと俺のターン

PHPプログラムを動かすには、別途 fcgiがいる

この fcgiをなんとかすればなんとかなる

ホントは、 Nginxと php-fpmを分離してヤッホイヽ ( ・∀・ ) ノ と書きたかった

早くするなら (phpが動く )サーバ増やせ!

Page 37: 第2回勉強会資料 岩本(配布用)

おわり ご清聴ありがとうございました