Alta Performance de Aplicações PHP com Nginx

  • 4,540 views
Uploaded 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

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
4,540
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
83
Comments
0
Likes
6

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1.
      Alta Performance de Aplicações PHP com Nginx
    Thiago Paes
  • 2. Thiago Paes
      10+ anos como desenvolvedor Evangelista Software Livre Trabalha no Vale1Convite
    Twitter: @mrprompt GitHub: http://github.com/mrprompt Página: http://thiagopaes.com.br
  • 3.  
  • 4. Apresentando
      Nginx - "Engine X" - é 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.
  • 5.
      Onde Utilizar
  • 6. Onde utilizar
      Máquinas com poucos recursos Economia de verba$ Aplicações de pequeno a médio porte Servir conteúdo estático – CDN
  • 7.
      Quem utiliza ?
  • 8.
      Quem utiliza ?
      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:
    • Rambler – o segundo site mais visitado da Rússia.
    • 9. Alexa Top 500:
    • 10. WordPress
    • 11. FC2
    • 12. YouPorn :P
    • 13. TorrentReactor
    • 14. Ultimate Guitar
    • 15. Scribd
    • 16. Badoo
    • 17. Facebook (?!?)
  • 18.
      Instalação
  • 19. Instalação
    • Ubuntu apt-get install nginx php5-fpm php5-memcached
    • 20. Fonte
    • 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
    • 22. Windows ?!?!?
  • 23.
      Configurando o NginX
  • 24.
      Configurando o NginX
      # /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; } … }
  • 25.
      PHP-FPM
  • 26. O que é
      PHP-FPM é um versão Daemon do PHP, que pode ser utilizado via proxy pelos servidores HTTP.
  • 27.
      Configurando
  • 28.
      Configurando o PHP-FPM
      # /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; } … }
  • 29.
      Nginx + CakePHP
  • 30. Nginx + CakePHP
      # /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; } } ... }
  • 31.
      Nginx + Zend Framework
  • 32.
      Nginx + Zend Framework
      # /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; } } ... }
  • 33.
      Nginx + Apache
  • 34.
      Porque?
  • 35.
    • Balanceamento de carga
    • 36. Liberando o Apache de servir conteúdo estático você ganha uma performance considerável
    • 37. CDN (Content Delivery Network)
    • 38. Chamadas a conteúdo estático ”externo” à aplicação são entregues mais rápidas, pois diminuem as requisições ao servidor HTTP
  • 39.
      Configurando
  • 40. Nginx + Apache
      # /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>
  • 41. Nginx + Apache
      # /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; } }
  • 42.
      Restringindo Acesso
  • 43.
      Restringindo Acesso
      # /etc/nginx/sites-available/default Server { … location ~ ^/(conf|templates|logs)/ { deny all; } ... }
  • 44.
      Autenticação HTTP
  • 45.
      Autenticação HTTP
      # /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
  • 46.
      Gzip
  • 47. Gzip
      # /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; ... }
  • 48.
      Cache
  • 49. Cache
      # /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; ... }
  • 50.
      UserDir
  • 51. UserDir
      # /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; } ... }
  • 52.
      MemCached
  • 53. MemCached
      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.
  • 54.
      Configurando
  • 55. Configurando o Memcached
      # /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
  • 56.
      Utilizando na prática
  • 57. Memcached - utilização
      $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 />'; }
  • 58.
      Dúvidas?
  • 59.
      Informações? http://nginx.net/ http://forum.nginx.org/ http://wiki.nginx.org/ http://blog.thiagopaes.com.br http://www.google.com