Nginx.pm

1,176 views
1,105 views

Published on

Nginx.pm is full-featured perl support for nginx.

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,176
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Nginx.pm

  1. 1. Nginx.pm use nginx or die; Андрей Гейн, УрФУ
  2. 2. … /about /search/images
  3. 3. … /about /search/images
  4. 4. Nginx
  5. 5. Nginx• Высокая нагрузка
  6. 6. Nginx• Высокая нагрузка• Кроссплатформенность
  7. 7. Nginx• Высокая нагрузка• Кроссплатформенность• Обратный прокси-сервер
  8. 8. Nginx• Высокая нагрузка• Кроссплатформенность• Обратный прокси-сервер• Балансировщик нагрузки
  9. 9. Nginx• Высокая нагрузка• Кроссплатформенность• Обратный прокси-сервер• Балансировщик нагрузки• Безопасность
  10. 10. Nginx• Высокая нагрузка• Кроссплатформенность• Обратный прокси-сервер• Балансировщик нагрузки• Безопасность• Модульность
  11. 11. Nginx• Высокая нагрузка• Кроссплатформенность• Обратный прокси-сервер• Балансировщик нагрузки• Безопасность• Модульность• Плюшки
  12. 12. Конфигурация
  13. 13. Конфигурацияserver { listen 80; server_name urfu.ru ustu.ru usu.ru; root /data/www;} location / { index index.html index.pl }
  14. 14. Конфигурацияserver { listen 80; server_name urfu.ru ustu.ru usu.ru; perl_handler root My::App::handler; /data/www; location / { index index.html index.pl }}
  15. 15. Конфигурацияlocation / { index index.html index.pl perl_handler My::App::handler; perl_access My::App::access_handler; perl_app /path/to/app.pl;}
  16. 16. Общие настройки
  17. 17. Общие настройкиperl_inc /path/to/lib;
  18. 18. Общие настройкиperl_inc /path/to/lib;perl_require My/App.pm;
  19. 19. Общие настройкиperl_inc /path/to/lib;perl_require My/App.pm;perl_eval $My::App::CONF{foo} = "bar";
  20. 20. HTTP API
  21. 21. HTTP APIsub handler { my $r = shift; my $buf = "Hello world!n";}
  22. 22. HTTP APIsub handler { my $r = shift; my $buf = "Hello world!n"; $r->header_out(Content-Length, length($buf)); $r->send_http_header(text/html; charset=UTF-8);}
  23. 23. HTTP APIsub handler { my $r = shift; my $buf = "Hello world!n"; $r->header_out(Content-Length, length($buf)); $r->send_http_header(text/html; charset=UTF-8); $r->print($buf); return NGX_OK;}
  24. 24. HTTP APIsub access_handler { my $r = shift; return NGX_OK;}
  25. 25. HTTP APIsub access_handler { my $r = shift; if ($r->uri eq /private) { return 403; } return NGX_OK;}
  26. 26. Изнутри
  27. 27. Изнутри$r->send_http_header($content_type)
  28. 28. Изнутри$r->send_http_header($content_type)$r->header_only
  29. 29. Изнутри$r->send_http_header($content_type)$r->header_only$r->status($error_code);
  30. 30. Изнутри$r->send_http_header($content_type)$r->header_only$r->status($error_code);$r->header_in("User-Agent")
  31. 31. Изнутри$r->send_http_header($content_type)$r->header_only$r->status($error_code);$r->header_in("User-Agent")$r->headers_in { content-type => [text/html], content-length => [1234] }
  32. 32. Изнутри$r->uri$r->send_http_header($content_type)$r->header_only$r->status($error_code);$r->header_in("User-Agent")$r->headers_in$r->header_out($name, $value)
  33. 33. Изнутри$r->uri$r->args
  34. 34. Изнутри$r->uri$r->args$r->request_method
  35. 35. Изнутри$r->uri$r->args$r->request_method$r->remote_addr
  36. 36. Изнутри$r->uri$r->args$r->request_method$r->remote_addr$r->location_name
  37. 37. Изнутри$r->uri$r->args$r->request_method$r->remote_addr$r->location_name$r->root
  38. 38. Изнутри$r->print($data, ...)$r->uri$r->args$r->request_method$r->remote_addr$r->location_name$r->root$r->request_body
  39. 39. Изнутри$r->print($data, ...)$r->unescape($data)
  40. 40. Изнутри$r->print($data, ...)$r->unescape($data)$r->sendfile($filename, $offset, $length)
  41. 41. Асинхронно?
  42. 42. Асинхронно?ngx_timer $after, $repeat, sub { } my $repeat = 5; ngx_timer $repeat, $repeat, sub { $repeat--; };
  43. 43. Асинхронно?ngx_timer $after, $repeat, sub { }ngx_resolver $name, $timeout, sub { }
  44. 44. Асинхронно?ngx_timer $after, $repeat, sub { }ngx_resolver $name, $timeout, sub { }ngx_http "$ip:$port:key=value;key=value...", $request, sub { }
  45. 45. Nginx::Test
  46. 46. Nginx::Test$nginx = find_nginx_perl
  47. 47. Nginx::Test$nginx = find_nginx_perl$port = get_unused_port
  48. 48. Nginx::Test$nginx = find_nginx_perl$port = get_unused_port$text = cat_nginx_logs $dir
  49. 49. Nginx::Test$nginx = find_nginx_perl$port = get_unused_port$text = cat_nginx_logs $dirprepare_nginx_dir_die $dir, $conf, $package1, $package2, ...
  50. 50. Nginx::Test$nginx = find_nginx_perl$port = get_unused_port$text = cat_nginx_logs $dirprepare_nginx_dir_die $dir, $conf, $package1, $package2, ...$child = fork_nginx_die $nginx, $dir
  51. 51. Nginx::Redis
  52. 52. Nginx::Redisngx_redis "$ip:$port:$auth:$timeout", [GET, mykey], sub { };
  53. 53. Тесты
  54. 54. Тестыnginx-perlNode.js
  55. 55. Тесты / /single /multinginx-perlNode.js10 потоков, 10 000 запросов, 3 запуска
  56. 56. Тесты / /single /multinginx-perl 3 (22) 5 (27) 7 (31)Node.js 5 (40) 6 (30) 14 (45)
  57. 57. Nginx::Questions

×