第2回勉強会資料 岩本(配布用)
-
Upload
takahisa-iwamoto -
Category
Documents
-
view
825 -
download
4
description
Transcript of 第2回勉強会資料 岩本(配布用)
Nginxのおはなし
いらちな現代人のためのWEBサーバ
とりあえず自己紹介
名前 岩本 貴久 所属 株式会社ビヨンド 生息地 おなか吹田市 仕事 セールスエンジニア
年齢 31歳
インテリアが大好き 「いわもん」と呼ばれたり呼ばれなかったり 好きな食べ物 パイナップル ラムネ 鶏肉 好きな観光地 自宅 (引きこもり )
いらちな人々
2009年 Akamai社の調査結果
Q1:WEBサイトの表示にどれぐらい時間がかかると「遅い」と感じるか?
A1:約半数のユーザーは、ページ表示の待ち時間が 2秒を超えるとイライラし始める。
Q2:WEBサイトの読み込みが何秒で終わることを期待するか?
A2:47%の消費者が「 2秒」と回答。
2006年の調査では 4秒という判断であり、3年でユーザーはかなりせっかちになっている。
サイトを高速化する理由
コンバージョン率の最適化
カスタマーエクスペリエンスとカスタマー満足度の向上
直帰率を下げる。
競争率が非常に激しいキーワードでオーガニックからのトラフィックを増やす。
全体的な競争力を高める。
運用費を節約する。
数字で見るページスピード
Googleではページスピードが検索の 1%に影響している。
ユーザーがページ表示に待てるのは 2秒まで。
3秒以上かかると 40%以上のユーザーは離脱する。
表示が 1秒遅れるごとにコンバージョン率は 7%落ちる。
表示が 1秒遅れるごとに顧客満足度は 16%落ちる。
速いサイトはインフラにかかるコストを50%かそれ以上削減する。
つまり 早いは正義!( ー `д ー ´) キリッ
じゃあ早くするよ
インフラ面で考えてみる
サーバ・ネットワークを増強 ⇒ お金がかかります
(ミドルウェアの )チューニング ⇒ 効果が薄い
根本的に早くするには、WEBサーバを入れ替えてしまえ!!
⇒ Nginxが早いらしい!!
(*´∀ ` *) ポワワ
ここまで、前振り。
で、本題です。
本当の戦いはこれからだっ!!
本日のアジェンダ
Nginxとは?
とりあえず、インストール
Apacheとの違い
ベンチマーク!
php-cgiを分離してみる
今日のまとめっ!
Nginxとは?1
「えんじんえっくす」と読みます。
特徴 高い並列性 処理性能 メモリ使用量の少なさ 処理が軽い 大量リクエストの処理にも向いている
他にも リバースプロキシ メールプロキシ ロードバランサ WAF
Nginxとは?2
採用サービス
クックパッド
サイバーエージェント
Wikipedia
Hulu
DropBox
グルーポン
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 サーバのシェア
とりあえずインストール1
要件
Nginxはソースインストール
PHPは Fast-CGIで実行し、Nginx⇔PHP間は Fast-CGI+UnixSocketで通信する
とりあえずインストール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
とりあえずインストール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
とりあえずインストール4
logrotateの設定 # vim /etc/logrotated/nginx
/var/log/nginx/*log {missingok
NotifemptySharedscriptsrotate 12WeeklyCompressPostrotatekill -USR1 `cat /var/run/nginx.pid`Endscript}
とりあえずインストール5
起動スクリプト# vim /etc/init.d/niginx
~長くて収まりませんでした。 m(_ _)m ~
起動スクリプトのパーミッションの変更# chmod 755 /etc/init.d/niginx
nginx.sh
とりあえずインストール6
コンフィグ設定# vim /usr/local/nginx/conf/nginx.conf
~長くて収まりませんでした。 m(_ _)m ~
Nginxの起動# /etc/init.d/nginx start
nginx.conf
とりあえずインストール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 と同じ
とりあえずインストール8
nginx.confの要点 2
sendfile on;#ファイル読み書きの効率化
tcp_nopush# sendfile が onの時、パケットの効率化
keepalive_timeout 0;#Apacheの Keepaliveと同じ (0 = off)
とりあえずインストール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を使う設定
とりあえずインストール10
今まで内容を⇓
Ctrl +A :全選択⇓
Ctrl +C :コピー⇓
Ctrl +V :ペースト⇓
以上っ!ヽ (*´∀ ` ) ノ キャッホーイ !!
Apacheとの違い 1
.htacsess が使えない
mod_phpが使えない
Rewriteの記述が変わる
プロセス型とスレッド型
Apacheとの違い 2
htacsess が使えない⇒ confにベタ書きしか方法が。 ( 要再起動 )
mod_phpが使えない⇒ fast-cgiを使って下さい。
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 ;
}
Apacheとの違い 4
プロセス型とスレッド型
Apache プロセスで処理 プロセス駆動アーキテクチャ リクエストが大量に来た際、プロセスが同時起動するのでオーバヘッドが大きくなるデメリット
Nginx スレッドで処理 イベント駆動アーキテクチャ 1つの処理時間が長くなる処理を実行した際、そこでプロセスがブロックされ処理能力が低下する
つまり、大量アクセスにはNginx、1処理が重いなら Apache
みんな大好きベンチマーク
ベンチマーク環境
AWS EC2 (AmazonLinux) + Wordpress
AWS RDS
みんな大好きベンチマーク
: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
みんな大好きベンチマーク
: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
php-cgiを分離してみる1
ベンチマーク環境
AWS EC2 (AmazonLinux) + Wordpress
AWS EC2 php-fpm用
AWS RDS
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;
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 ミリ秒
php-cgiを分離してみる4
あれ・・・? ( ゚ д ゚ ) ポカーン
php-cgiを分離してみる5
理想 PHPとWEBを分けたから、倍の速度出るだろう
+ ( 0 ゚・∀・) + ワクテカ +
と
現実 1 台構成と大差ない (´Д`|||) ドヨーン
php-cgiを分離してみる5
この後、 Nginx+php-fpm 構成 x2 とNginx x1 + php-fpmx1 構成のベンチマークを考えていたけど
割愛
本日のまとめっ!
Nginxは静的コンテンツ爆速
特に、大量アクセスだと俺のターン
PHPプログラムを動かすには、別途 fcgiがいる
この fcgiをなんとかすればなんとかなる
ホントは、 Nginxと php-fpmを分離してヤッホイヽ ( ・∀・ ) ノ と書きたかった
早くするなら (phpが動く )サーバ増やせ!
おわり ご清聴ありがとうございました