• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Alta Performance de Aplicações PHP com Nginx
 

Alta Performance de Aplicações PHP com Nginx

on

  • 4,989 views

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

Statistics

Views

Total Views
4,989
Views on SlideShare
4,989
Embed Views
0

Actions

Likes
6
Downloads
79
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Alta Performance de Aplicações PHP com Nginx Alta Performance de Aplicações PHP com Nginx Presentation Transcript

      • Alta Performance de Aplicações PHP com Nginx
      Thiago Paes
    • 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
    •  
    • 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.
      • Onde Utilizar
    • Onde utilizar
        Máquinas com poucos recursos Economia de verba$ Aplicações de pequeno a médio porte Servir conteúdo estático – CDN
      • Quem utiliza ?
      • 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.
      • Alexa Top 500:
      • WordPress
      • FC2
      • YouPorn :P
      • TorrentReactor
      • Ultimate Guitar
      • Scribd
      • Badoo
      • Facebook (?!?)
      • Instalação
    • Instalação
      • 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 ?!?!?
      • Configurando o NginX
      • 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; } … }
      • PHP-FPM
    • O que é
        PHP-FPM é um versão Daemon do PHP, que pode ser utilizado via proxy pelos servidores HTTP.
      • Configurando
      • 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; } … }
      • Nginx + CakePHP
    • 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; } } ... }
      • Nginx + Zend Framework
      • 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; } } ... }
      • Nginx + Apache
      • Porque?
      • 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 HTTP
      • Configurando
    • 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>
    • 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; } }
      • Restringindo Acesso
      • Restringindo Acesso
        # /etc/nginx/sites-available/default Server { … location ~ ^/(conf|templates|logs)/ { deny all; } ... }
      • Autenticação HTTP
      • 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
      • Gzip
    • 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; ... }
      • Cache
    • 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; ... }
      • UserDir
    • 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; } ... }
      • MemCached
    • 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.
      • Configurando
    • 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
      • Utilizando na prática
    • 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 />'; }
      • Dúvidas?
      • Informações? http://nginx.net/ http://forum.nginx.org/ http://wiki.nginx.org/ http://blog.thiagopaes.com.br http://www.google.com