Your SlideShare is downloading. ×
Alta Performance de Aplicações PHP com Nginx
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

Alta Performance de Aplicações PHP com Nginx

4,736
views

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

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

0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,736
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
86
Comments
0
Likes
7
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