Nginxのお話Kentaro Yoshida at Webサーバ勉強会 on 2011/11/11
本日の流れ#1 ApacheとNginxの連携で高速画像配信 Apache等のVirtualHost設定と2重管理は行わない 実質メンテナンスフリーを実現#2 Nginxによる中間キャッシュサーバ 期限切れの削除性能高く、かなり実用的 ngin...
#1 ApacheとNginxの連携で高速画像配信こんなケースに最適 Nginxの高速な応答性能を取り入れたい 画像の配信にpreforkで動くApacheから応答する事は卒業したい でも、PHPを利用している都合上、Apacheをworker...
#1 ApacheとNginxの連携で高速画像配信構成 ロードバランサ配下にWebサーバがある構成 Apacheとは別のポートを使い、互いに依存しない構成メリット 別ポートを使うため、Apacheと共存可能で設定変更も不要 ApacheとNgi...
#1 ApacheとNginxの連携で高速画像配信 upstream backend-apache {     server 127.0.0.1:80; } server {     listen       8080;     server_...
upstream backend-apache {    server 127.0.0.1:80;}server {    listen       8080;    server_name _;    access_log off;    l...
location / {        log_not_found off;        expires 12h;        root /var/www/site;        try_files /$host$uri /$host/w...
#2 Nginxによる中間キャッシュサーバこんなケースに最適 mod_mem_cache や mod_disk_cacheでiowaitに悩まされている squidよりも簡単な透過的なキャッシュサーバが欲しい n時間に1回リフレッシュしたいAP...
#2 Nginxによる中間キャッシュサーバ構成 ロードバランサ配下にWebサーバがある構成 Nginxが待ち受け、キャッシュが無ければApacheへ受け流すメリット tmpfsにキャッシュを書き込む事で読み書きの圧倒的高速化 設定がシンプルで簡...
#2 Nginxによる中間キャッシュサーバ残念な実装(mod_disk_cache + Cronで期限切れファイル削除) ディレクトリを上から順番に探索 ファイルリストを取得し、それぞれの更新日を取得 条件に該当したら削除Nginxの実装 ng...
#2 Nginxによる中間キャッシュサーバproxy_cache_path /dev/shm/nginx-cache/test levels=1 keys_zone=test-cache:2m max_size=500m inactive=1h...
proxy_cache_path /dev/shm/nginx-cache/test levels=1keys_zone=test-cache:2m max_size=500m inactive=1h;upstream api-backends...
server {  listen 192.168.50.20:80;  server_name hoge.jp;  access_log off;  error_log /var/log/nginx/error.log;  proxy_set_...
http://twitter.com/yoshi_ken/status/41522958027460608
無視できる範囲のiowait
nginx cache managerの動き# strace -p 10088Process 10088 attached - interrupt to quitepoll_wait(19, {}, 512, 2909)           =...
Nginxイイね!
Upcoming SlideShare
Loading in …5
×

Nginxのお話 画像配信・APIキャッシュ利用事例 2011/11/11 Webサーバ勉強会

3,330 views

Published on

PHPを使うには、ApacheをPreforkで動作させる必要があります。そういった環境で画像配信を行うと必要な同時接続数がとても多くなるため効率的ではありません。そこで、Nginxを併用した高速静的ファイル配信方法を紹介します。
2つ目のトピックには、APIリクエストをNginxにて透過的にプロキシすることでコンテンツキャッシュを行う仕組みを紹介します。

Published in: Technology

Nginxのお話 画像配信・APIキャッシュ利用事例 2011/11/11 Webサーバ勉強会

  1. 1. Nginxのお話Kentaro Yoshida at Webサーバ勉強会 on 2011/11/11
  2. 2. 本日の流れ#1 ApacheとNginxの連携で高速画像配信 Apache等のVirtualHost設定と2重管理は行わない 実質メンテナンスフリーを実現#2 Nginxによる中間キャッシュサーバ 期限切れの削除性能高く、かなり実用的 nginx cache managerが軽い理由も解説
  3. 3. #1 ApacheとNginxの連携で高速画像配信こんなケースに最適 Nginxの高速な応答性能を取り入れたい 画像の配信にpreforkで動くApacheから応答する事は卒業したい でも、PHPを利用している都合上、Apacheをworkerには出来ない ApacheのVirtualHost設定ファイルと重複する内容は書きたくない
  4. 4. #1 ApacheとNginxの連携で高速画像配信構成 ロードバランサ配下にWebサーバがある構成 Apacheとは別のポートを使い、互いに依存しない構成メリット 別ポートを使うため、Apacheと共存可能で設定変更も不要 ApacheとNginxの良いところ取りが出来る
  5. 5. #1 ApacheとNginxの連携で高速画像配信 upstream backend-apache { server 127.0.0.1:80; } server { listen 8080; server_name _; access_log off; location / { log_not_found off; expires 12h; root /var/www/site; try_files /$host$uri /$host/web/$uri @unicorn; } location @unicorn { log_not_found off; expires 12h; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://backend-apache; } }
  6. 6. upstream backend-apache { server 127.0.0.1:80;}server { listen 8080; server_name _; access_log off; location / { log_not_found off; expires 12h; root /var/www/site; try_files /$host$uri /$host/web/$uri @unicorn; }
  7. 7. location / { log_not_found off; expires 12h; root /var/www/site; try_files /$host$uri /$host/web/$uri @unicorn; } location @unicorn { log_not_found off; expires 12h; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://backend-apache; }}
  8. 8. #2 Nginxによる中間キャッシュサーバこんなケースに最適 mod_mem_cache や mod_disk_cacheでiowaitに悩まされている squidよりも簡単な透過的なキャッシュサーバが欲しい n時間に1回リフレッシュしたいAPIリクエストのキャッシュ
  9. 9. #2 Nginxによる中間キャッシュサーバ構成 ロードバランサ配下にWebサーバがある構成 Nginxが待ち受け、キャッシュが無ければApacheへ受け流すメリット tmpfsにキャッシュを書き込む事で読み書きの圧倒的高速化 設定がシンプルで簡単に利用できる 定期的なキャッシュ削除が軽い
  10. 10. #2 Nginxによる中間キャッシュサーバ残念な実装(mod_disk_cache + Cronで期限切れファイル削除) ディレクトリを上から順番に探索 ファイルリストを取得し、それぞれの更新日を取得 条件に該当したら削除Nginxの実装 nginx cache managerが定期的にフルパス指定で削除
  11. 11. #2 Nginxによる中間キャッシュサーバproxy_cache_path /dev/shm/nginx-cache/test levels=1 keys_zone=test-cache:2m max_size=500m inactive=1h;upstream api-backends { server 127.0.0.1:80;}server { listen 192.168.50.20:80; server_name hoge.jp; access_log off; error_log /var/log/nginx/error.log; proxy_set_header Host $host; location /service-api/ { proxy_cache test-cache; proxy_cache_valid 200 4h; proxy_cache_valid any 1m; proxy_pass http://api-backends; }}
  12. 12. proxy_cache_path /dev/shm/nginx-cache/test levels=1keys_zone=test-cache:2m max_size=500m inactive=1h;upstream api-backends { server 127.0.0.1:80;}server { listen 192.168.50.20:80; server_name hoge.jp; access_log off; error_log /var/log/nginx/error.log; proxy_set_header Host $host; location /service-api/ {
  13. 13. server { listen 192.168.50.20:80; server_name hoge.jp; access_log off; error_log /var/log/nginx/error.log; proxy_set_header Host $host; location /service-api/ { proxy_cache test-cache; proxy_cache_valid 200 4h; proxy_cache_valid any 1m; proxy_pass http://api-backends; }}
  14. 14. http://twitter.com/yoshi_ken/status/41522958027460608
  15. 15. 無視できる範囲のiowait
  16. 16. nginx cache managerの動き# strace -p 10088Process 10088 attached - interrupt to quitepoll_wait(19, {}, 512, 2909) = 0unlink("/dev/shm/nginx-cache/foo-api/e/69/844b59da41ddaa0d9dd66147e2a0769e") = 0unlink("/dev/shm/nginx-cache/foo-api/e/ca/219b1560899d1d33c5ab30b21420acae") = 0nanosleep({0, 200000000}, NULL) = 0unlink("/data/nginx/cache/foo-image/7/56/a0f7597a0916c5e03422f8f1168ab567") = 0unlink("/data/nginx/cache/foo-image/2/ae/f9d0d8722d114b7f57748ec28aaa0ae2") = 0epoll_wait(19, {}, 512, 10000) = 0
  17. 17. Nginxイイね!

×