0
<ul>Alta Performance de Aplicações PHP com Nginx </ul>Thiago Paes
Thiago Paes <ul>10+ anos como desenvolvedor Evangelista Software Livre Trabalha no Vale1Convite </ul>Twitter: @mrprompt Gi...
 
Apresentando <ul>Nginx - &quot;Engine X&quot; - é um servidor e proxy  reverso HTTP de alta performance, gratuito e  open-...
<ul>Onde Utilizar </ul>
Onde utilizar <ul>Máquinas com poucos recursos Economia de verba$ Aplicações de pequeno a médio porte Servir conteúdo está...
<ul>Quem utiliza ? </ul>
<ul>Quem utiliza ? </ul><ul>Segundo a W2Techs, aproxidamente 51% de 1 milhão de grandes sites na web (segundo relatórios d...
Alexa Top 500:
WordPress
FC2
YouPorn :P
TorrentReactor
Ultimate Guitar
Scribd
Badoo
Facebook (?!?) </li></ul>
<ul>Instalação </ul>
Instalação <ul><li>Ubuntu apt-get install nginx php5-fpm php5-memcached
Fonte
wget  http://nginx.org/download/nginx-x.x.x.tar.gz tar zxvf nginx-x.x.x.tar.gz cd nginx-x.x.x ./configure make make install
Windows ?!?!? </li></ul>
<ul>Configurando o NginX </ul>
<ul>Configurando o NginX </ul><ul># /etc/nginx/sites-available/default server {   listen  80; ## listen for ipv4   listen ...
<ul>PHP-FPM </ul>
O que é <ul>PHP-FPM é um versão Daemon do PHP, que pode ser utilizado via proxy pelos servidores HTTP. </ul>
<ul>Configurando </ul>
<ul>Configurando o PHP-FPM </ul><ul># /etc/php5/fpm/pool.d/www.conf … listen = 127.0.0.1:9000 … user = www-data group = ww...
<ul>Nginx + CakePHP </ul>
Nginx + CakePHP <ul># /etc/nginx/sites-available/default Server{   ...   location / {   root /var/www/app/webroot;   index...
<ul>Nginx + Zend Framework </ul>
<ul>Nginx + Zend Framework </ul><ul># /etc/nginx/sites-available/default Server {   ...   location / {   root /var/www/pub...
<ul>Nginx + Apache </ul>
<ul>Porque? </ul>
<ul><li>Balanceamento de carga
Liberando o Apache de servir conteúdo estático você ganha uma performance considerável
CDN (Content Delivery Network)
Chamadas a conteúdo estático ”externo” à aplicação são entregues mais rápidas, pois diminuem as requisições ao servidor HT...
<ul>Configurando </ul>
Nginx + Apache <ul># /etc/apache2/ports.conf NameVirtualHost *:8080 Listen 8080 <IfModule mod_ssl.c>   Listen 443 </IfModu...
Nginx + Apache <ul># /etc/nginx/sites-enabled/default upstream servers  {   ip_hash;   server 127.0.0.1:8080;   server srv...
<ul>Restringindo Acesso </ul>
<ul>Restringindo Acesso </ul><ul># /etc/nginx/sites-available/default Server {   …   location ~ ^/(conf|templates|logs)/ {...
<ul>Autenticação HTTP </ul>
Upcoming SlideShare
Loading in...5
×

Alta Performance de Aplicações PHP com Nginx

4,915

Published on

Segunda versão da minha palestra sobre alto desempenho de aplicações web em PHP utilizando o servidor HTTP Nginx ministrada no Minicursos e Palestras do Casin – 2ª Edição

Published in: Technology

Transcript of "Alta Performance de Aplicações PHP com Nginx"

  1. 1. <ul>Alta Performance de Aplicações PHP com Nginx </ul>Thiago Paes
  2. 2. Thiago Paes <ul>10+ anos como desenvolvedor Evangelista Software Livre Trabalha no Vale1Convite </ul>Twitter: @mrprompt GitHub: http://github.com/mrprompt Página: http://thiagopaes.com.br
  3. 4. Apresentando <ul>Nginx - &quot;Engine X&quot; - é um servidor e proxy reverso HTTP de alta performance, gratuito e open-source, bem como um servidor proxy para IMAP/POP3. Escrito por Igor Sysoev em 2005, Nginx agora hospeda entre 1% e 4% de todos os domínios do mundo, dentre eles, sites de grande visitação como WordPress, Hulu, Github, Ohloh, SourceForge e TorrentReactor. Mesmo ainda em beta, o Nginx é conhecido por sua estabilidade, rico conjunto de características, facilidades, simples configuração e baixo consumo de recursos. </ul>
  4. 5. <ul>Onde Utilizar </ul>
  5. 6. Onde utilizar <ul>Máquinas com poucos recursos Economia de verba$ Aplicações de pequeno a médio porte Servir conteúdo estático – CDN </ul>
  6. 7. <ul>Quem utiliza ? </ul>
  7. 8. <ul>Quem utiliza ? </ul><ul>Segundo a W2Techs, aproxidamente 51% de 1 milhão de grandes sites na web (segundo relatórios da Alexa) usam NginX de alguma forma em sua estrutura. NginX ja é o terceiro webserver mais utilizado, logo após Apache (70.2%) e IIS (20.5%). Alguns sites: <li>Rambler – o segundo site mais visitado da Rússia.
  8. 9. Alexa Top 500:
  9. 10. WordPress
  10. 11. FC2
  11. 12. YouPorn :P
  12. 13. TorrentReactor
  13. 14. Ultimate Guitar
  14. 15. Scribd
  15. 16. Badoo
  16. 17. Facebook (?!?) </li></ul>
  17. 18. <ul>Instalação </ul>
  18. 19. Instalação <ul><li>Ubuntu apt-get install nginx php5-fpm php5-memcached
  19. 20. Fonte
  20. 21. wget http://nginx.org/download/nginx-x.x.x.tar.gz tar zxvf nginx-x.x.x.tar.gz cd nginx-x.x.x ./configure make make install
  21. 22. Windows ?!?!? </li></ul>
  22. 23. <ul>Configurando o NginX </ul>
  23. 24. <ul>Configurando o NginX </ul><ul># /etc/nginx/sites-available/default server { listen 80; ## listen for ipv4 listen [::]:80 default ipv6only=on; ## listen for ipv6 server_name localhost; access_log /var/log/nginx/localhost.access.log; location / { root /var/www; index index.html index.htm; autoindex on; } … } </ul>
  24. 25. <ul>PHP-FPM </ul>
  25. 26. O que é <ul>PHP-FPM é um versão Daemon do PHP, que pode ser utilizado via proxy pelos servidores HTTP. </ul>
  26. 27. <ul>Configurando </ul>
  27. 28. <ul>Configurando o PHP-FPM </ul><ul># /etc/php5/fpm/pool.d/www.conf … listen = 127.0.0.1:9000 … user = www-data group = www-data … pm = dynamic pm.max_children = 15 pm.start_servers = 2 … # /etc/nginx/sites-available/default server { … location ~ .php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; include fastcgi_params; } … } </ul>
  28. 29. <ul>Nginx + CakePHP </ul>
  29. 30. Nginx + CakePHP <ul># /etc/nginx/sites-available/default Server{ ... location / { root /var/www/app/webroot; index index.php; autoindex on; if (-f $request_filename) { break; } if (!-f $request_filename) { rewrite ^/(.+)$ /index.php?url=$1 last; break; } } ... } </ul>
  30. 31. <ul>Nginx + Zend Framework </ul>
  31. 32. <ul>Nginx + Zend Framework </ul><ul># /etc/nginx/sites-available/default Server { ... location / { root /var/www/public; index index.php; autoindex on; if (!-e $request_filename) { rewrite ^/(.*)$ /index.php? Last; break; } } ... } </ul>
  32. 33. <ul>Nginx + Apache </ul>
  33. 34. <ul>Porque? </ul>
  34. 35. <ul><li>Balanceamento de carga
  35. 36. Liberando o Apache de servir conteúdo estático você ganha uma performance considerável
  36. 37. CDN (Content Delivery Network)
  37. 38. Chamadas a conteúdo estático ”externo” à aplicação são entregues mais rápidas, pois diminuem as requisições ao servidor HTTP </li></ul>
  38. 39. <ul>Configurando </ul>
  39. 40. Nginx + Apache <ul># /etc/apache2/ports.conf NameVirtualHost *:8080 Listen 8080 <IfModule mod_ssl.c> Listen 443 </IfModule> <IfModule mod_gnutls.c> Listen 443 </IfModule> # /etc/apache2/sites-enabled/default <VirtualHost *:8080> ServerAdmin [email_address] ServerName www.empresa.com.br DocumentRoot /var/www/ ... </VirtualHost> </ul>
  40. 41. Nginx + Apache <ul># /etc/nginx/sites-enabled/default upstream servers { ip_hash; server 127.0.0.1:8080; server srv2.exemplo.com.br; } server { listen 80; ## listen for ipv4 listen [::]:80 default ipv6only=on; ## listen for ipv6 server_name www.empresa.com.br ; access_log /var/log/nginx/d-a.proxy.log; # Servir diretamente os diretórios: /images/ + /css/ + /js/ location ^~ /(images|css|js) { root /var/www/; access_log /var/log/nginx/d-a.direct.log ; } # Servir diretamente arquivos com extensão: location ~* .(js|css|rdf|xml|ico|txt|gif|jpg|png|jpeg)$ { root /var/www/; access_log /var/log/nginx/d-a.direct.log; } # Para qualquer outra requisição não servida anteriormente, enviar para o Pool servers. Location / { proxy_pass http://servers ; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } } </ul>
  41. 42. <ul>Restringindo Acesso </ul>
  42. 43. <ul>Restringindo Acesso </ul><ul># /etc/nginx/sites-available/default Server { … location ~ ^/(conf|templates|logs)/ { deny all; } ... } </ul>
  43. 44. <ul>Autenticação HTTP </ul>
  44. 45. <ul>Autenticação HTTP </ul><ul># /etc/nginx/sites-available/default Server { ... location ~ /admin { root /var/www/admin; autoindex on; auth_basic &quot;Acesso Restrito&quot;; auth_basic_user_file /var/www/admin/.htpasswd; } ... } # Como gerar o .htpasswd? Utilizando o htpasswd que acompanha o Apache ou scripts facilmente encontrados na net </ul>
  45. 46. <ul>Gzip </ul>
  46. 47. Gzip <ul># /etc/nginx/nginx.conf Http { ... gzip on; gzip_min_length 1100; gzip_buffers 4 8k; gzip_disable &quot;MSIE [1-6].&quot;; gzip_http_version 1.0; gzip_comp_level 6; gzip_proxied any; gzip_types text/plain text/css application/x-javascript text/javascript; output_buffers 1 32k; postpone_output 1460; ... } </ul>
  47. 48. <ul>Cache </ul>
  48. 49. Cache <ul># /etc/nginx/sites-available/default Server { …. location ~ /.(jpg|jpeg|gif|css|png|js|ico)/$ { access_log off; expires 30d; } ... } # /etc/nginx/nginx.conf http { … expires 24h; add_header Cache-Control private; ... } </ul>
  49. 50. <ul>UserDir </ul>
  50. 51. UserDir <ul># /etc/nginx/sites-available/default Server { … location ~ ^/~([^/]+)/(.+.php)$ { if (!-f /home/$1/public_html/$2) { rewrite ^ 404; } alias /home/$1/public_html/$2; ... location ~ ^/~([^/]+)(/.*)?$ { alias /home/$1/public_html$2; autoindex on; } ... } </ul>
  51. 52. <ul>MemCached </ul>
  52. 53. MemCached <ul>MemCached é um servidor livre e de código aberto, de alta performance, que produz cache em memória distribuída, que pode ser utilizado em aplicações web dinâmicas para alivar a carga dos bancos de dados e outros tipos de chamadas que demandem tempo de processamento e tráfego de rede. </ul>
  53. 54. <ul>Configurando </ul>
  54. 55. Configurando o Memcached <ul># /etc/default/memcached ENABLE_MEMCACHED=yes # /etc/memcached.conf … -m 64 # memória a ser reservada -p 11211 # porta de conexão -u memcache # usuário do daemon -l 127.0.0.1 # ip a ser escutado … # /etc/init.d/memcached start </ul>
  55. 56. <ul>Utilizando na prática </ul>
  56. 57. Memcached - utilização <ul>$objCache = new Memcache(); $objCache->pconnect('localhost', '11211'); $arrPosts = $objCache->get('posts'); if ($arrPosts === false) { $arrPosts = Twitter::listar('mrprompt', null, 1, 5); $objCache->set('posts', $arrPosts, 0, 600); } foreach($arrPosts as $arrPost) { echo $arrPost['strPost'] . '<br />'; } </ul>
  57. 58. <ul>Dúvidas? </ul>
  58. 59. <ul>Informações? http://nginx.net/ http://forum.nginx.org/ http://wiki.nginx.org/ http://blog.thiagopaes.com.br http://www.google.com </ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×