Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

EC2でNginxを使ってみよう JAWS大阪第9回勉強会資料

2,934 views

Published on

WEBサーバNginxに関する説明やapacheとの比較ベンチマーク、EC2での使用方法など

Published in: Technology

EC2でNginxを使ってみよう JAWS大阪第9回勉強会資料

  1. 1. EC2でNginxを 使ってみよう!
  2. 2.  名前 原岡 昌寛  所属 株式会社ビヨンド http://beyondjapan.com 自己紹介 ホスティングとかクラウド構築・保守とかやって ます。あとWEB系開発も。  仕事 インフラエンジニア  年齢 36才  愛読書 3児の父 少年ジャンプ  好きな食べ物 ハンバーグ カレー ラーメン
  3. 3. 2009年 Akamai社の調査結果  Q1: WEBサイトの表示にどれぐらい時間がかかると 「遅い」と感じるか? せっかちな 人々  A1: 約半数のユーザーは、ページ表示の待ち時間が2秒 を超えるとイライラし始める。  Q2: WEBサイトの読み込みが何秒で終わることを期待 するか?  A2: 47%の消費者が「2秒」と回答。  2006年の調査では4秒という判断であり、 3年でユーザーはかなりせっかちになっている。
  4. 4.  Googleではページスピードが検索の1%に影響している。  ユーザーがページ表示に待てるのは2秒まで。 数字で見る ページ スピード  3秒以上かかると40%以上のユーザーは離脱する。  表示が1秒遅れるごとにコンバージョン率は7%落ちる。  表示が1秒遅れるごとに顧客満足度は16%落ちる。  速いサイトはインフラにかかるコストを 50%かそれ以上削減する。
  5. 5. 速さこそが正義! …いい時代になったものだ つまり
  6. 6. インフラ面で考えてみる  サーバ・ネットワークを増強  ⇒ お金がかかります んじゃ 速くしましょ  (OS、ミドルウェアの)チューニング  ⇒ なかなか効果がでない場合も  いっそWEBサーバを入れ替えてしまえ!! ⇒ Nginxって速いらしいよ!?
  7. 7. ここまで、 前振り。 で、本題です。
  8. 8.  Nginxとは?  とりあえず、インストール 本日の アジェンダ  Apacheとの違い  PHP-FPMについて  ベンチマーク!  まとめ
  9. 9.  「えんじんえっくす」と読みます。  名前が強そうです。  特徴 Nginxとは? 1      高い並列性 処理性能 メモリ使用量の少なさ 処理が軽い 大量リクエストの処理にも向いている  他にも  リバースプロキシ ※よく使われる  メールプロキシ  ロードバランサ なんかもある
  10. 10.  採用サービス  Facebook  Drop box  Hulu Nginxとは? 2  Wikipedia  Git hub  pixiv  クックパッド などなど多くの企業で使われています。
  11. 11. WEBサーバのシェア Netcraft社調査 Nginxとは? 3 Developer Apache July 2013 Percent August 2013 Percent Change 364,696,792 52.19% 336,622,050 46.96% -5.23 Microsoft 137,351,211 19.65% 163,098,703 22.75% 3.10 nginx 95,017,255 13.60% 104,311,568 14.55% 0.96 Google 27,406,059 3.92% 30,550,914 4.26% 0.34
  12. 12. 要件  サーバはEC2  m1.medium  Amazon Linux とりあえず インストール 1  Nginxはソースインストール  PHPはPHP-FPM(Fast-CGI)で実行
  13. 13.  php-fpmのインストール # yum install php php-devel php-fpm # chkconfig php-fpm on とりあえず インストール 2  php-fpm の設定 # vim /etc/php-fpm.d/www.conf # UnixSocketで通信 listen = /var/run/php-fpm/www.sock user = nginx group = nginx  php-fpmの起動 # /etc/init.d/php-fpm start
  14. 14. Nginx のインストール  必要モジュールのインストール # yum install pcre pcre-devel openssl openssl-devel gcc  ユーザの追加 とりあえず インストール 3 # useradd –s /sbin/nologin –d /usr/local/nginx 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 --withhttp_ssl_module --with-http_realip_module # make # make install
  15. 15.  logrotateの設定 # vim /etc/logrotated/nginx /var/log/nginx/*log { missingok とりあえず インストール 4 Notifempty Sharedscripts rotate 12 Weekly Compress Postrotate kill -USR1 `cat /var/run/nginx.pid` Endscript }
  16. 16.  起動スクリプト # vim /etc/init.d/niginx  起動スクリプトのパーミッションの変更 とりあえず インストール 5 # chmod 755 /etc/init.d/niginx  コンフィグ設定 # vim /usr/local/nginx/conf/nginx.conf  Nginxの起動 # /etc/init.d/nginx start
  17. 17. nginx.confの要点1  worker_processes 1; # CPUコア数に揃える  worker_rlimit_nofile 4096; nginx.confの要 点1 #ファイルの同時オープン数(ApacheのServerLimit )  worker_connections 4096; # workerの同時接続数(ApacheのMaxClients)  server_tokens off; #ApacheのServerTokens と同じ
  18. 18.  sendfile on; #ファイル読み書きの効率化  tcp_nopush nginx.confの要 点2 # sendfile がonの時、パケットの効率化  keepalive_timeout 0; #ApacheのKeepaliveと同じ(0=off)
  19. 19.  location ~ .php$ {     nginx.confの要 点3 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を使う設定
  20. 20.  nginxユーザのファイルディスクリプタの上限 を変更 # vi /etc/security/limits.conf nginx OS側も ちょっと設定 soft nofile 4096 nginx hard nofile 4096  システム全体のファイルディスクリプタの制限 をアップ # vi /etc/sysctl.conf fs.file-max = 50000
  21. 21. yumも使えるよ♪ とりあえず 使ってみたい 方は (リポジトリを準備して) # yum install –y php php-fpm # yum install –y nginx
  22. 22.  .htaccess が使えない Apacheとの 違い1 ⇒ confにベタ書きしか方法が。(要再起動)  mod_phpが使えない ⇒ fast-cgiを使って下さい。
  23. 23.  Rewriteの記述が変わる  Apache <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_HOST} ^beyondjapan.com$ [NC] RewriteRule ^(.*)$ http://www.beyondjapan.com/$1 [R=301,L] Apacheとの 違い2 </IfModule> ⇓あら簡単  Nginx server { server_name beyondjapan.com; rewrite ^(.*)$ http://www.beyondjapan.com$1 ; }
  24. 24.  Apache  プロセスで処理(preforkの場合)※workerもある  プロセス駆動アーキテクチャ  リクエストが大量に来た際、プロセスが同時起動 するのでオーバヘッドが大きくなるデメリット  重い処理は比較的得意 Apacheとの 違い3  Nginx     スレッドで処理 イベント駆動アーキテクチャ 少ないプロセスでより多くのアクセスが捌ける 1つの処理時間が長くなる処理を実行した際、そこ でプロセスがブロックされ処理能力が低下する  つまり、大量アクセスにはNginx、 1処理が重いならApache
  25. 25.  FPM  FastCGI Process Manager  PHP の FastCGI 実装のひとつ PHP-FPM (FastCGI)  高負荷のサイトで有用な追加機能がある  (slowlog出力など)  対応バージョン  PHP 5.3.3からバンドル  PHP 5.4.0 からPHP公式サポート  プロトコル:FastCGI  FastCGIはプロセスをメモリ上に永続化して使い まわすことによって負荷を軽減する
  26. 26.  slowlogを出力することができる  N秒以上かかるアクセスを検出  N秒時点でのバックトレースも取れる  slowlogを出力する閾値(秒)  request_slowlog_timeout = 2 PHP-FPMの 独自機能 (1)  slowlogの出力先  slowlog = /var/log/php-fpm/www-slow.log  該当ファイルの、一番最初にN秒を超えたもの しかトレースしない。 ※ 全てをトレースするわけではない もしかしたらやり方があるのかも。。。 こんな感じでログ が出力される
  27. 27. 使用していない子プロセスを自動的に削減する (メモリの節約) PHP-FPMの 独自機能 (2) microインスタンスなんかにはよさそう ・pm = ondemand ・pm.start_servers=1 しばらくアクセスが無いと、 子プロセスがなくなる。
  28. 28.  ベンチマーク環境 ベンチマーク をとってみる  AWS EC2 (AmazonLinux) m1.medium + Wordpress  AWS RDS db.m1.large
  29. 29. リクエスト回数:2 0 リクエスト回数:5 0 リクエスト回数:1 0 0 リクエスト回数:2 0 0 リクエスト回数:4 0 0 A p a ch e 3 5 ミリ秒 3 6 ミリ秒 6 0 ミリ秒 1 2 2 ミリ秒 2 5 0 ミリ秒 N gi x n 3 5 ミリ秒 3 7 ミリ秒 4 3 ミリ秒 4 0 ミリ秒 5 7 ミリ秒 ab結果 静的コンテンツ 300 ミリ秒 250 ミリ秒 200 ミリ秒 静的コンテンツ ベンチマーク 150 ミリ秒 100 ミリ秒 50 ミリ秒 0 ミリ秒 リクエスト回数:20 リクエスト回数:50 リクエスト回数:100リクエスト回数:200リクエスト回数:400 Apache Nginx
  30. 30. 静的コンテンツは速い!! つまり
  31. 31. リクエスト回数:2 0 リクエスト回数:5 0 リクエスト回数:1 0 0 リクエスト回数:2 0 0 リクエスト回数:4 0 0 A p a ch e 3 0 0 5 ミリ秒 7 3 4 4 ミリ秒 1 2 7 1 8 ミリ秒 1 9 5 2 4 ミリ秒 4 1 8 8 9 ミリ秒 N gi x n 3 1 9 3 ミリ秒 6 1 1 5 ミリ秒 9 4 0 1 ミリ秒 1 7 7 5 2 ミリ秒 4 8 9 4 4 ミリ秒 ab結果 動的コンテンツ 60000 ミリ秒 50000 ミリ秒 40000 ミリ秒 動的コンテンツ ベンチマーク 30000 ミリ秒 20000 ミリ秒 10000 ミリ秒 0 ミリ秒 Apache Nginx
  32. 32. 結果はいまいち 動的コンテンツはあんまり速くない? うーん・・
  33. 33. ロードアベレージ (動的コンテンツ100同時アクセス× 500回) Apache Nginx じゃあ リソースは? メモリ使用率 (動的コンテンツ100同時アクセス× 500回) Apache Nginx
  34. 34. 軽いじゃないの!! CPU、メモリ共に負荷が大幅に下がった! おお!
  35. 35.  Nginxは静的コンテンツ爆速  特に、大量アクセスだと俺のターン ベンチの まとめ  動的コンテンツはそんなに速くない  けどリソース使用率は大幅に下がる  ってことは低スペックサーバでも結構動くはず
  36. 36. これは使えるね!! micro,smallでも結構動きます・・・ 結論
  37. 37. おまけ でもApacheも使い続けたいって人は
  38. 38. リバースプロキシとして使う Nginxをリーバスプロキシにして静的コンテンツをキャッシュし、Apacheをバックエ ンドにして動的コンテンツを実行する方法があります。 下記最低限の設定です。実際に使う場合はもう少し設定あり ■Nginx側 server { listen 80; こんな方法 もあります (1) server_name beyondjapan.com; # このサーバへの全てのアクセスを転送 location /var/www/html/wp-admin { proxy_pass http://127.0.0.1:8080;} } ■Apace側 Apacheのポートのlistenを変更 Listen 8080 NameVirtualHost 127.0.0.1:8080 <VirtualHost 127.0.0.1:8080> ServerName hogehoge.com:8080
  39. 39. 画像サーバ的に使う  動的コンテンツはapacheのまま、静的コンテンツは nginxを使用する つまり画像ファイルだけ分離する こんな方法 もあります (2)  ポート、サブドメイン、ドキュメントルートを設定して server { listen 8080; server_name img.beyondjapan.com; ... location / { root /home/beyondjapan/www; index index.php; } } 画像側はこんな感じでアクセス http://img.beyondjapan.com:8080/aaaa.png
  40. 40. おわり  ご清聴ありがとうございました

×