SlideShare uma empresa Scribd logo
1 de 157
Baixar para ler offline
1
Especialização em Desenvolvimento Web08/04/20
AMBIENTE E
INFRAESTRUTURA
Frederico F. Siena
fredericosiena@utfpr.edu.br
2
Ambiente e Infraestrutura WEB
08/04/20
Objetivos desta disciplina
Capacitar o aluno a planejar e implementar uma
infraestrutura mínima para a execução de
aplicações web seguindo os padrões abertos da
W3C de maneira segura e escalável em
ambiente próprio ou locado.
3
Ambiente e Infraestrutura WEB
08/04/20
Aptidões almejadas

Instalar e configurar uma distribuição
GNU/Linux;

Instalar e configurar os servidores web
Apache (com suporte a PHP5), Nginx e
Varnish;

Instalar e customizar os SGBDs MySQL e
PostgreSQL;
4
Ambiente e Infraestrutura WEB
08/04/20
Aptidões almejadas

Utilizar appliances prontos para cada
necessidade;

Gerir ambientes na Amazon Web Services®;

Realizar testes de para conferir a
homologação de um ambiente seguro.
5
Ambiente e Infraestrutura WEB
08/04/20
Programação
21/02/2015

Teoria
✔
Arquitetura Cliente/Servidor
✔
Protocolo TCP/IP
✔
Protocolo HTTP
✔
Servidores WEB
✔
Módulos para servidores WEB
✔
Banco de Dados (mySQL/pgSQL)
✔
Hardware vs Tunning
6
Ambiente e Infraestrutura WEB
08/04/20
Programação
21/02/2015

Teoria
✔
Virtualização com o VirtualBox
➢
Preparação de ambiente
➢
Provisionamento e deploy
✔
GNU/Linux
➢
Noções básicas do SO Ubuntu
➢
Editando arquivos com o VI
➢
Entendendo a distribuição de pacotes
do Ubuntu
7
Ambiente e Infraestrutura WEB
08/04/20
Pegue seu café e
mantenha-se acordado
8
Ambiente e Infraestrutura WEB
08/04/20
Arquitetura Cliente/Servidor
“É uma abordagem da computação que separa os
processos em plataformas independentes que
interagem, permitindo que os recursos sejam
compartilhados enquanto se obtém o máximo de
benefício de cada dispositivo diferente, ou seja, Cliente/
Servidor é um modelo lógico”.
VASKEVITCH, (1995, pág. 375).
9
Ambiente e Infraestrutura WEB
08/04/20
Arquitetura Cliente/Servidor
Segundo Hulquist (HULQUIST,1997) apud Salemi
(SALEMI,1993) este modelo é caracterizado como
segue:
10
Ambiente e Infraestrutura WEB
08/04/20
Cliente
Também denominado de “front-end” e “WorkStation”, é
um processo que interage com o usuário através de
uma interface gráfica ou não, permitindo consultas ou
comandos para recuperação de dados e
análise e representando o meio pela qual os resultados
são apresentados.
11
Ambiente e Infraestrutura WEB
08/04/20
Servidor
Também denominado “back-end”, fornece determinado
(s) serviço (s) que fica (m) disponível (eis) para todo
cliente que o requisite. A natureza e escopo do serviço
são definidos pelo objetivo da aplicação
Cliente/Servidor. Além disso, ele apresenta ainda
algumas propriedades distintas:
12
Ambiente e Infraestrutura WEB
08/04/20
Servidor

É o processo reativo na relação Cliente/ Servidor.

Possui uma execução contínua.

Recebe e responde às solicitações de diversos
Clientes.

Presta serviços distribuídos.
13
Ambiente e Infraestrutura WEB
08/04/20
Vantagens
✔
Confiabilidade
✔
Centralização e Segurança
✔
Escalabilidade
✔
Independência de Plataforma e SO
14
Ambiente e Infraestrutura WEB
08/04/20
Desvantagens
✔
Sobrecarga
✔
Gerenciamento
✔
Heterogeneidade
15
Ambiente e Infraestrutura WEB
08/04/20
Modelo 2 Camadas
16
Ambiente e Infraestrutura WEB
08/04/20
Modelo 3 Camadas
17
Ambiente e Infraestrutura WEB
08/04/20
Modelo 3/4 Camadas (web)
18
Ambiente e Infraestrutura WEB
08/04/20
TCP / IP
O TCP é um protocolo de nível da camada de
transporte (camada 4) do
Modelo OSI e é sobre o
qual que se assentam a
maioria das aplicações,
como o SSH, FTP, HTTP.
19
Ambiente e Infraestrutura WEB
08/04/20
TCP / IP
Orientado à conexão
A aplicação envia um pedido de conexão para o destino
e usa a "conexão" para transferir dados.
Ponto a ponto
Uma conexão TCP é estabelecida entre dois pontos.
20
Ambiente e Infraestrutura WEB
08/04/20
TCP / IP
Confiabilidade
Possibilita a recuperação de pacotes perdidos, eliminação
de duplicados, a recuperação de dados corrompidos e pode
restabelecer ao encontrar problemas de meio.
Full Duplex
Transferência simultânea em ambas direções durante toda
a sessão.
21
Ambiente e Infraestrutura WEB
08/04/20
TCP / IP
Handshake
Mecanismo de estabelecimento e finalização de
conexão a três e quatro tempos, respectivamente, o
que permite a autenticação e encerramento de uma
sessão completa. O TCP garante que, no final da
conexão, todos os pacotes foram bem recebidos.
22
Ambiente e Infraestrutura WEB
08/04/20
TCP / IP
Controle de Fluxo
O TCP usa o campo janela ou window para controlar o
fluxo. O receptor, à medida que recebe os dados, envia
mensagens ACK (=Acknowledgement), confirmando a
recepção de um segmento. Em resumo, elimina a
possibilidade do remetente sobrecarregar o destinatário.
23
Ambiente e Infraestrutura WEB
08/04/20
TCP / IP
O TCP/IP, é formado por um grande conjunto de
diferentes protocolos de rede. Ele deriva dos dois
protocolos mais importantes e mais utilizados, que são
os seguintes:

TCP (Transmission Control Protocol)

IP (Internet Protocol)
24
Ambiente e Infraestrutura WEB
08/04/20
TCP / IP
TCP (transporte)
Protocolo de transporte. Executa importantes funções para
garantir que os dados sejam entregues de uma maneira
confiável.
IP (rede)
Protocolo de rede. Responsável pelo endereçamento e
roteamento. Provê meios para estabelecer um caminho
entre origem e destino
25
Ambiente e Infraestrutura WEB
08/04/20
TCP / IP
26
Ambiente e Infraestrutura WEB
08/04/20
Cabeçalho IP
27
Ambiente e Infraestrutura WEB
08/04/20
Cabeçalho IPv4
28
Ambiente e Infraestrutura WEB
08/04/20
HTTP
HyperText Transfer Protocol
Protocolo de comunicação mantido pelo W3C utilizado
para sistemas de informação de hipermídia distribuídos e
colaborativos.
Seu uso surgiu da necessidade de distribuir informações
pela rede de maneira padronizada para a obtenção de
recursos interligados, o que culminou o surgimento da
World Wide Web.
29
Ambiente e Infraestrutura WEB
08/04/20
HTTP
É um protocolo de aplicação responsável pelo
tratamento de pedidos e respostas entre cliente e
servidor na Internet através do uso de regras básicas.
30
Ambiente e Infraestrutura WEB
08/04/20
HTTP
Um programa requisitante (cliente) estabelece uma
conexão com um outro programa receptor (servidor) e
envia-lhe uma requisição, contendo a URI, a versão do
protocolo, uma mensagem MIME contendo os
modificadores da requisição, informações sobre o
cliente e, possivelmente, o conteúdo no corpo da
mensagem.
31
Ambiente e Infraestrutura WEB
08/04/20
Métodos HTTP

GET: Solicita algum recurso por meio do protocolo
HTTP.

HEAD: Variação do GET. Obtém somente o cabeçalho da
resposta.

POST: Envia dados para serem processados para o
recurso especificado.
32
Ambiente e Infraestrutura WEB
08/04/20
Métodos HTTP

PUT: Envia certo recurso (Upload).

DELETE: Exclui o recurso.

TRACE: Ecoa o pedido, de maneira que o cliente possa
saber o que os servidores intermediários estão mudando
em seu pedido.
33
Ambiente e Infraestrutura WEB
08/04/20
Métodos HTTP

OPTIONS: Recupera os métodos HTTP que o servidor
aceita.

CONNECT: Serve para uso com um proxy que possa se
tornar um túnel SSL (um túnel pode ser usado, por
exemplo, para criar uma conexão segura).
34
Ambiente e Infraestrutura WEB
08/04/20
Métodos HTTP (get)
telnet www.google.com 80
Trying 64.233.163.104...
Connected to www.l.google.com.
Escape character is '^]'.
GET / HTTP/1.1
HTTP/1.1 302 Found
Location: http://www.google.com.br/
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Set-Cookie:
PREF=ID=c828845416419fb6:TM=1271466117:LM=1271466117:S=xWBi4aTDqXGboVMI;
expires=Mon, 16-Apr-2012 01:01:57 GMT; path=/; domain=.google.com
Set-Cookie:
NID=33=rLLQbMPjTqBPKgAPbtfIs4AvjR4umT7D9zd4Qj_nev7qqyHdsqb9gq9DkDRzljiLAFMtdvCPcHf
u6TFzdtZAcxCciOwt4s9gxsD96Ya1myHU93tJiTIHJZs0zbCoUdZy; expires=Sun, 17-Oct-2010
01:01:57 GMT; path=/; domain=.google.com; HttpOnly
Date: Sat, 17 Apr 2010 01:01:57 GMT
Server: gws
Content-Length: 222
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8“>
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF=http://www.google.com.br/>here</A>.
</BODY></HTML>
35
Ambiente e Infraestrutura WEB
08/04/20
Métodos HTTP (post)
POST /diretorio/arquivo.html HTTP/1.1
Host: www.exemplo.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; pt-BR; rv:1.9.2b5)
Gecko/20091204 Firefox/3.6b5
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: pt-br,pt;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-alive: 115
Cookie: nome=valor; nome2=valor2
Connection: keep-alive
Content-Length: 28
usuario=exemplo&senha=123456
36
Ambiente e Infraestrutura WEB
08/04/20
Conexões HTTP
HTTP / 1.0 – Stateless
As conexões entre um cliente e um servidor são
encerradas após o envio de cada requisição ou
resposta. Cada vez que uma conexão é estabelecida ou
encerrada, é consumida uma grande quantidade de
tempo da CPU, largura de banda e memória.
37
Ambiente e Infraestrutura WEB
08/04/20
Conexões HTTP
HTTP / 1.1 – Persistent
Possibilita que uma conexão seja estabelecida para
enviar várias requisições em sequência sem a
necessidade de esperar por cada resposta, no qual
serão recebidas na mesma ordem em que as
solicitações foram enviadas, um processo chamado
de pipelining.
38
Ambiente e Infraestrutura WEB
08/04/20
Conexões HTTP
CLIENTE SERVIDOR
CLOSE
OPEN
TEMPO
CLIENTE SERVIDOR
CLOSE
OPEN
TEMPO
CLOSE
CLOSE
OPEN
OPEN
HTTP / 1.0 – Stateless
HTTP / 1.1 – Persistent
39
Ambiente e Infraestrutura WEB
08/04/20
O tunning faz toda a diferença!
40
Ambiente e Infraestrutura WEB
08/04/20
Tunning vs Velocidade
Em 2009 o Google fez um experimento onde expôs a
um grupo de usuários uma busca mais lenta. O
resultado por página aumentou de 10 para 30, onde o
tempo de carregamento foi de 0.4s para 0.9s.
Resultado: As buscas diminuíram em 20%.
0,5s
41
Ambiente e Infraestrutura WEB
08/04/20
Tunning vs Velocidade
O Yahoo! descobriu que, para cada 400ms de melhora
na performance, seu tráfego aumentava em 9%.
400 ms
42
Ambiente e Infraestrutura WEB
08/04/20
Tunning vs Velocidade
A Amazon concluiu que apenas 100ms de melhora em
seu site, aumentou 1% seu faturamento.
100 ms
1º Trimestre de 2012 = U$ 13,2 Bilhões – 1% = U$132
Milhões
2º Trimestre de 2012 = U$ 12,8 Bilhões – 1% = U$128
Milhões
43
Ambiente e Infraestrutura WEB
08/04/20
Tunning vs Velocidade
"If it is fast and ugly, they will use it and curse you; if it is
slow, they will not use it"
David Cheriton
Computer Science Professor
Stanford University
"Se ele é rápido e feio, eles vão criticar mas vão usá-lo,
porém se for lento ninguém irá usá-lo"
44
Ambiente e Infraestrutura WEB
08/04/20
Tunning vs Velocidade
"Performance golden rule: Optimize front-end
performance first, that's where 80/90% of the end-user
response time is spent.""
Steve Souders
High Performance Web Sites
45
Ambiente e Infraestrutura WEB
08/04/20
Tunning vs Velocidade
principal.jpg = 245KB
www.utfpr.edu.br -> 580.5KB
1 requisições/seg.:
1 Segundo : 580 KB
1 Minuto : 33 MB
1 Hora : 1.9 GB
1 Dia : 47 GB
1 Mês : 1.4 TB
1 Ano : 17 TB
Tempo Carregamento : 1,54 s
Tempo Carregamento principal.jpg : 1,16s
46
Ambiente e Infraestrutura WEB
08/04/20
Tunning vs Velocidade
principal.jpg = 45KB
www.utfpr.edu.br -> 380.5KB
1 requisições/seg.:
1 Segundo : 380 KB
1 Minuto : 22 MB
1 Hora : 1.3 GB
1 Dia : 31 GB
1 Mês : 950 GB
1 Ano : 11 TB
Previsto
Tempo Carregamento : 1,14 s
Tempo Carregamento principal.jpg : 400 ms
47
Ambiente e Infraestrutura WEB
08/04/20
Servidores WEB
Um software responsável por aceitar pedidos HTTP de
clientes, e servi-los com as respectivas respostas, incluindo
opcionalmente dados, que geralmente são páginas web,
tais como documentos (html, php, etc) com objetos
embutidos (imagens, etc.).
Timothy John Berners-Lee
48
Ambiente e Infraestrutura WEB
08/04/20
Servidores WEB
X
49
Ambiente e Infraestrutura WEB
08/04/20
E agora,
LAMP ou LNMP?
50
Ambiente e Infraestrutura WEB
08/04/20
Servidores WEB
51
Ambiente e Infraestrutura WEB
08/04/20
Servidores WEB
Apache
Criado em 1995 é Responsável por 58% dos sites ativos no
mundo (aprox. 102 Milhões).
Implementa 100% do padrão HTTP/1.1;
Disponível para diversos SO's, além do GNU/Linux o para
qual foi criado inicialmente.
52
Ambiente e Infraestrutura WEB
08/04/20
Servidores WEB
Apache
Suporte ao protocolo HTTPS;
Facilmente extensível (PHP, JSP, Perl, Python etc.) por meio
de módulos extras;
Suporte a VirtualHosts, possibilitando a hospedagem várias
páginas no mesmo servidor.
53
Ambiente e Infraestrutura WEB
08/04/20
Servidores WEB
NGINX*
Criado em 2005, encontrava-se presente em 3% de sites
ativos em 2008.
Ultrapassou o IIS em 2012 ficando em 2º lugar no ranking,
com 12.18% de sites ativos.
Hoje é responsável por aproximadamente 22 Milhões de
sites ativos em 3º lugar.
* pronuncia-se Engine-X
54
Ambiente e Infraestrutura WEB
08/04/20
Servidores WEB
Varnish
Varnish Cache é um acelerador de aplicação web também
conhecido como cache HTTP e proxy reverso. Ele deve ser
instalado atuar antes do seu servidor web principal pois irá
armazenar em cache o conteúdo de todas as chamadas.
Ele normalmente acelera entre 300 a 1000x dependendo de
sua arquitetura.
55
Ambiente e Infraestrutura WEB
08/04/20
Vamos praticar...
56
Ambiente e Infraestrutura WEB
08/04/20
Prática 1 (requisitos)
➢
VirtualBox + Extension Pack
➢
ISO do Ubuntu 14.04 Network Install
➢
Putty
57
Ambiente e Infraestrutura WEB
08/04/20
Prática 1 (VBOX install)
✔
Escolha a plataforma
●
i386 ou AMD64
✔
Instale o Extension Pack para dar suporte ao hardware
do hospedeiro (opcional).
✔
Crie a definição da máquina para o servidor web.
58
Ambiente e Infraestrutura WEB
08/04/20
Prática 1 (VBOX install)
✔
webserver1
●
Plataforma : amd64
●
Tipo : Ubuntu GNU/Linux
●
Memória : 1024 MB
●
Disco : 40 GB (dinamicamente expansível)
●
Chipset : PIIX3
●
Disp. Apontador : PS/2
●
Virt. de Hardware : VT-x/AMD-V e Paginação aninhada
59
Ambiente e Infraestrutura WEB
08/04/20
Prática 1 (VBOX install)
Se ao clonar ou copiar uma vm obtiver mensagens de erro de uuid de
disco, utilize o comando abaixo para a correção:
$ VBoxManage internalcommands sethduuid nome_da_vm.vdi → Vdisc
60
Ambiente e Infraestrutura WEB
08/04/20
Prática 1 (servidor web)
webserver1 ~ 20
●
IP : 172.17.171.1 ~ 20
●
Rede : 172.17.171.0
●
Máscara : 255.255.0.0
●
Broadcast : 172.17.255.255
●
Gateway : 172.17.250.1
●
DNS's : 172.17.250.2 8.8.8.8
●
Host : webserver?
●
Usuários : root, administrador
●
Senhas : 111111
61
Ambiente e Infraestrutura WEB
08/04/20
O básico do VI / VIM

Habilitar o modo de edição
✔
Insert ou i : Edição
✔
Insert 2x : Substituição

Atalhos
✔
:w = Salva
✔
:x / :wq = Salva e sai
✔
:q! = Sai em modo forçado em salvar
62
Ambiente e Infraestrutura WEB
08/04/20
O básico do VI / VIM
Edição
●
/ [texto] = Buscar
●
u = Desfazer
●
x = Apagar a direita do cursor
●
d+X+↓↑ = Apagar X linhas abaixo/acima
●
dd = Apagar linha
●
yy = Copiar linha
●
y+X+↓↑ = Copiar X linhas -1 acima/abaixo
●
p = Colar
63
Ambiente e Infraestrutura WEB
08/04/20
O básico do VI / VIM
Dicas
●
:set number = Habilitar a numeração de linha
●
:s/A/B = Substituir A por B
64
Ambiente e Infraestrutura WEB
08/04/20
Prática 1 (servidor web)
Instalação e ajustes...
65
Ambiente e Infraestrutura WEB
08/04/20
O básico do apt-get
Para atualizar a lista local de pacotes:
 apt-get update
Para instalar as atualizações disponíveis:
 apt-get upgrade
Para instalar um pacote:
 apt-get install [nome_do_pacote]
Para remover um pacote:
 apt-get remove [nome_do_pacote]
Para remover completamente um pacote:
 apt-get --purge remove [nome_do_pacote]
Buscar um pacote pelo nome ou descrição:
 apt-cache search [nome/descrição]
66
# apt-get update && apt-get -V upgrade
# updatedb
# apt-get install vim
# vi /etc/vim/vimrc
...
syntax on
...
# vi ~/.bashrc
...
export LS_OPTIONS='--color=auto'
eval “'dircolors'”
...
Ambiente e Infraestrutura WEB
08/04/20
Prática 1 (vim)
67
# vi /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
allow-hotplug eth0
iface eth0 inet static
address 172.17.171.1
netmask 255.255.255.0
network 172.17.171.0
broadcast 172.17.171.255
gateway 172.17.250.1
dns-nameservers 172.17.250.2 8.8.8.8
dns-search espwebux.lan
# ifdown eth0 ; /etc/init.d/networking stop
# service networking start ; ifup eth0
Ambiente e Infraestrutura WEB
08/04/20
Prática 1 (rede)
68
# vi /etc/resolv.conf
...
nameserver 172.17.250.2
nameserver 8.8.8.8
...
# vi /etc/hosts
...
127.0.0.1 localhost
127.0.1.1 webserver1
...
Ambiente e Infraestrutura WEB
08/04/20
Prática 1 (dns / hosts)
127.0.0.1 é loopback para o ip real
do host, já o 127.0.1.1 é um ip
adicional para o mesmo host (
Debian: Chapter 5), basicamente
para chamadas recusadas para
loopback.
Caso não tenha setado o
dns em
/etc/network/interfaces,
pode-se fixar em
/etc/resolv.conf.
69
# dpkg-reconfigure tzdata
# apt-get install ntpdate
# cd /etc/cron.hourly
# vi ntp
#!/bin/sh
ntpdate pool.ntp.br
exit 0
# chmod +x ntp
# service cron restart OU
# /etc/init.d/cron restart
Ambiente e Infraestrutura WEB
08/04/20
Prática 1 (ntp)
70
Ambiente e Infraestrutura WEB
08/04/20
Prática 1 (ntp: horário de verão)
Como não há um padrão para a vigência do horário de verão
no Brasil (depende de decretos), a cada ano um novo período
é “estabelecido” mas pode sofrer alterações de última hora,
além de possuirmos quatro fusos distintos (UTC -5, -4, -3 e -2
conforme site do Observatório Nacional), devemos ajustar
manualmente. Estas mudanças podem gerar danos
financeiros e técnicos vindo comprometer seu servidor e
serviços de rede.
71
Ambiente e Infraestrutura WEB
08/04/20
Prática 1 (ntp: horário de verão)
Para o Paraná o
Time Zone correto
é o UTC -2, porém
o geral para o
Brasil é o -3.
72
Ambiente e Infraestrutura WEB
08/04/20
Prática 1 (ntp: horário de verão)
# cd /usr/share/zoneinfo/posix/Brasil
# mv East East.ori
# rm ../../Brazil/East
# vi verao_2014-16.zic
Rule Brazil 2014 only - Oct 19 00:00 1 S
Rule Brazil 2015 only - Feb 22 00:00 0 -
Rule Brazil 2015 only - Oct 18 00:00 1 S
Rule Brazil 2016 only - Feb 21 00:00 0 -
#Zone NAME GMTOFF RULES/SAVE FORMAT[UNTIL]
Zone Brazil/East -3:00 Brazil BR%sT
# zic verao_2014-16.zic
# cd ../../Brazil/
# rm East
# ln -s ../posix/Brasil/East ./
# mv /etc/localtime /etc/localtime.ori
# cp East /etc/localtime
# ntpdate pool.ntp.br
# date
A regra diz que o
início é no 3o
domingo de
outubro
(19/10/14) e o
final no 3o
domingo de
fevereiro
(15/02/15),
porém a data
final ficou para o
dia 22
contradizendo a
regra.
73
# apt-get install ssh
# vi /etc/ssh/sshd_config
Port ????
PermitRootLogin no
PermitEmptyPassword no
PasswordAuthentication yes
# cd /etc
# mv securetty securetty.ori
# touch securetty
# /etc/init.d/ssh restart
Ambiente e Infraestrutura WEB
08/04/20
Prática 1 (ssh / securetty)
74
Ambiente e Infraestrutura WEB
08/04/20
Prática 1 (putty)
75
Ambiente e Infraestrutura WEB
08/04/20
Apache (Prefork vs Worker vs Event)
Prefork: PHP como módulo do apache. Cada requisição HTTP é
atendida por um processo individual criado a partir de um fork.
Worker: PHP através de CGI. No modo worker, os processos-filhos
têm capacidade de lançar vários threads que ouvem por
requisições.
Event: PHP-FPM (FastCGI Process Manager). É uma variante do
worker, elaborada para permitir mais requisições simultâneas
utilizando intensamente os threads.
76
Ambiente e Infraestrutura WEB
08/04/20
Apache (Prefork vs Worker vs Event)
Por padrão o Apache utiliza o MPM Prefork para sistemas
monoprocessados e o MPM Worker para sistemas multiprocessados.
✔
Cada request é tratado por um processo
separado (não trava o pai).
✔
Pode ser utilizado com módulos não thread-
safe.
✔
Maior consumo de memória.
✔
Mais estável.
✔
Indicado p/ + de 3 mil req. simultâneas.
✔
Problemas na thread podem travar o pai.
✔
Problemas c/ módulos não thread-safe.
✔
Maior velocidade de resposta.
✔
Menor consumo de memória.
✔
Requer menos hardware.
✔
Difícil de debugar.
✔
Menos estável.
77
Ambiente e Infraestrutura WEB
08/04/20
E agora,
Prefork, Worker ou Event?
78
Ambiente e Infraestrutura WEB
08/04/20
Apache (Qual MPM escolher?)
1) O núcleo do sistema operacional suporta threads?
2) O núcleo do sistema operacional suporta threads seguros
(thread-safe polling)?
3) Sua aplicação está madura o suficiente para trabalhar com
threads?
Se a resposta é sim para todas as perguntas, seu MPM deve ser o
event.
Se a resposta é sim para a primeira pergunta, seu MPM deve ser o
worker.
Se a resposta é não para qualquer uma das perguntas, seu MPM
deve ser o prefork.
79
Ambiente e Infraestrutura WEB
08/04/20
Dicas de segurança
UTILIZE SENHAS DIFÍCEIS DE SEREM DESCOBERTAS E FÁCEIS DE SEREM
LEMBRADAS POR VOCÊ
NÃO DEIXE TUDO NA MESMA MÁQUINA
MANTENHA O SERVIDOR ATUALIZADO
apt-get update
apt-get upgrade
SE POSSÍVEL UTILIZE FIREWALL's
CRIE UMA DMZ E COLOQUE SEU WEBSERVER NELA
DEIXE SOMENTE OS SOFTWARES NECESSÁRIOS
80
Ambiente e Infraestrutura WEB
08/04/20
Apache Prefork
81
Ambiente e Infraestrutura WEB
08/04/20
Apache (Prefork)
O método prefork é mantido para fins de compatibilidade com
antigos sistemas que não podem suportar o uso de threads, para
servidores que atendem poucas requisições ou possuem um
processador legado de núcleo único.
Entretanto, mesmo hoje prefork é conhecido pela estabilidade de
seu código, desenvolvido ao longo de anos, e ainda é o modo
preferido por muitos administradores.
Alberto Federman Neto
http://www.vivaolinux.com.br/artigo/Apache-24-Modulos-de-Multiprocessamento-MPM
82
Ambiente e Infraestrutura WEB
08/04/20
Apache (Prefork)
Lembre-se que para um servidor web com Apache responder
carga a qual foi planejada, o GNU/Linux deve ter parâmetros de
kernel devidamente ajustados como:

Limpeza de cache de memória

Ajustes nos segmentos de memória compartilhada

Coleta de lixo

Memória virtual

Paginação

Semaphore
http://kernel-handbook.alioth.debian.org/
83
Ambiente e Infraestrutura WEB
08/04/20
Tunando o SO
# su – www-data -c 'ulimit -aHS' -s '/bin/bash'
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 9433
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 9433
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
●
Exibindo os limites máximos do www-data
84
Ambiente e Infraestrutura WEB
08/04/20
Tunando o SO
# ps aux | grep apache
Root 2083 0.0 0.8 37204 10016 ? Ss 17:38 0:00 /usr/sbin/apache2 -k start
www-data 2088 0.0 0.2 24700 2880 ? S 17:38 0:00 /usr/sbin/apache2 -k start
# cat /proc/2083/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 9433 9433 processes
Max open files 8192 8192 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 9433 9433 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
●
Exibindo os limites de determinado processo
85
Ambiente e Infraestrutura WEB
08/04/20
Tunando o SO
# ulimit -Sn ; ulimit -Hn
# ulimit -n 80000 ; ulimit -n
# sysctl fs.file-max fs.file-max=500000
fs.file-max = 120719
fs.file-max = 500000
# vi /etc/sysctl.conf
...
fs.file-max = 500000
...
# vi /etc/security/limits.conf
...
* soft nproc 500000
* hard nproc 500000
* soft nofile 500000
* hard nofile 500000
Existem duas maneiras de alterar os limites. Utilizando o comando
ulimit ou o sysctl (visualiza ou altera parâmetros do kernel em /proc/
sys/)
86
Ambiente e Infraestrutura WEB
08/04/20
Apache (Cálculo de memória)
# ps -ylC apache2 –sort:rss
S 33 17530 16102 0 78 0 6008 5038 341548 ? 00:00:00 apache2
S 33 17491 16102 0 75 0 6036 5036 354540 ? 00:00:00 apache2
S 33 17529 16102 0 75 0 6036 5038 357283 ? 00:00:00 apache2
S 33 17472 16102 0 75 0 6044 5038 359161 ? 00:00:00 apache2
S 33 17438 16102 0 75 0 6056 5036 351130 ? 00:00:00 apache2
# top
25255 nobody 15 0 8992 4796 2088 S 0.7 0.1 0:01.10 apache2
25330 nobody 15 0 9112 5040 2304 S 0.7 0.1 0:01.02 apache2
25369 nobody 15 0 8824 4608 2084 S 0.7 0.1 0:01.07 apache2
25372 nobody 15 0 9088 4792 2084 S 0.7 0.1 0:00.92 apache2
25399 nobody 15 0 8928 4876 2296 S 0.7 0.1 0:00.81 apache2
Quantidade de memória gasta
por processo (KB)
Memória virtual
Memória residente
Memória
compartilhada
87
Ambiente e Infraestrutura WEB
08/04/20
Apache (Cálculo de memória)
Como calcular o valor correto para os parâmetros MaxClients e
ServerLimit?
Ao utilizar o comando free na máquina virtual criada (com 1024
MB de ram) obtemos o resultado abaixo:
Dividindo a média de memória aproximada para cada conexão (6
MB) pela memória total disponível (1080 MB) conclui-se que o
máximo de conexões é de 180.
Total used free
Mem: 1217464 473960 743504
-/+ buffers/cache: 136596 1080868
Swap: 1748988 0 1748988
88
# apt-get install apache2-mpm-prefork php5 openssl 
libapache2-mod-php5 ca-certificates
# vi /etc/apache2/apache2.conf
...
ServerName webserver1?
...
# apt-get install php5-mysql OU
# apt-get install php5-pgsql
Ambiente e Infraestrutura WEB
08/04/20
Apache (Prefork: instalação)
Para retirar a mensagem
“Could not reliably determine
the server's fully qualified
domain name, using
127.0.1.1 for ServerName”
89
Ambiente e Infraestrutura WEB
08/04/20
Apache (Prefork: configuração)
# vi /etc/apache2/mods-available/mpm_prefork.conf
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 150
MaxRequestsPerChild 5
</IfModule>
90
Ambiente e Infraestrutura WEB
08/04/20
Apache+PHP (Segurança básica)
# vi /etc/apache2/conf-available/security.conf
...
ServerTokens Prod
ServerSignature Off
TraceEnabler Off
...
# vi /etc/php5/apache2/php.ini
expose_php Off
Dicas

Páginas de erro
/etc/apache2/conf.d/localized-error-pages

Fail2Ban

SELinux

Apparmor
91
# vi /etc/apache2/sites-available/espwebux2015.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName espwebux2015.com
ServerAlias www.espwebux2015.com espwebux2015.com
DocumentRoot /var/www/espwebux2015
<Directory /var/www/espwebux2015/>
Options Indexes
DirectoryIndex index.html index.php
AllowOverride None
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error_espwebux2015.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access_espwebux2015.log
vhost_combined
</VirtualHost>
Ambiente e Infraestrutura WEB
08/04/20
Apache (Prefork: Virtual Host)
92
# mkdir /var/www/espwebux2015
# chown -R www-data:www-data /var/www/espwebux2015
# chmod -R 755 /var/www/espwebux2015
# service apache2 restart
# a2ensite espwebux2015
# a2dissite 000-default
# ls -la /etc/apache2/sites-enabled
Ambiente e Infraestrutura WEB
08/04/20
Apache (Prefork: Virtual Host)
93
# mkdir /etc/apache2/cert ; cd /etc/apache2/cert
# openssl genrsa -des3 -out espwebux2015_cert.key 2048
# openssl rsa -in espwebux2015_cert.key -out 
espwebux2015_cert_nopwd.key
# chmod 600 espwebux2015_cert_nopwd.key
# openssl req -new -key espwebux2015_cert.key -out 
espwebux2015_cert.csr
# openssl x509 -req -days 365 -in espwebux2015_cert.csr 
-signkey espwebux2015_cert.key -out espwebux2015_cert.crt
Ambiente e Infraestrutura WEB
08/04/20
Apache (Prefork: Certificado)
Gerar a chave privada (Private Key)
Remove a senha da chave privada
Gerar o pedido de certificação (Certificate Signing Request).
Country: BR, State: Parana, Locality: Londrina, Org./OU:
UTFPRLD, Common Name: espwebux2015.com, Email:
email@admin.com.
Assinar o certificado (Self-Signed Certificate):
94
# vi /etc/apache2/sites-available/espwebux2015.conf
…
SSLEngine on
SSLCertificateFile /etc/apache2/cert/nome_cert.crt
SSLCertificateKeyFile /etc/apache2/cert/nome_cert_nopwd.key
...
# a2enmod ssl ; service apache2 restart
Ambiente e Infraestrutura WEB
08/04/20
Apache (Prefork: Módulo SSL)
Módulo SSL
Adicionar os certificados ao Virtual Host,
carregar o módulo ssl e reiniciar o Apache
95
Ambiente e Infraestrutura WEB
08/04/20
Apache Worker
96
# apt-get install apache2-mpm-worker php5 php5-cgi 
php5-cli libapache2-mod-fcgid openssl ca-certificates
# vi /etc/apache2/apache2.conf
...
ServerName webserver1
...
# apt-get install php5-mysql OU
# apt-get install php5-pgsql
# a2dismod php5;
# a2enmod deflate;a2enmod rewrite;a2enmod include
# a2enmod fcgid
# a2ensite espwebux2015
# service apache2 restart
Ambiente e Infraestrutura WEB
08/04/20
Apache (Worker: instalação)
Para retirar a mensagem
“Could not reliably determine
the server's fully qualified
domain name, using
127.0.1.1 for ServerName”
97
Ambiente e Infraestrutura WEB
08/04/20
Apache (Worker: configuração)
# cd /etc/apache2/mods-available
# cp -pa mpm_worker.conf mpm_worker.conf.ori
# vi mpm_worker.conf
<IfModule mpm_worker_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 150
MaxConnectionsPerChild 0
KeepAliveTimeout 5
</IfModule>
Resolvido no mpm-event
98
# vi /etc/apache2/sites-available/espwebux2015.conf
<VirtualHost *:80>
ServerName espwebux2015.com
ServerAlias www.espwebux2015.com espwebux2015.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/espwebux2015
<Directory /var/www/espwebux2015>
AddHandler fcgid-script .php
FCGIWrapper /usr/lib/cgi-bin/php5 .php
Options ExecCGI
</Directory>
#Logs
ErrorLog ${APACHE_LOG_DIR}/error_espwebux2015.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access_espwebux2015.log
vhost_combined
</VirtualHost>
Ambiente e Infraestrutura WEB
08/04/20
Apache (Worker: Virtual Host)
99
# mkdir /var/www/espwebux2015
# chown -R www-data:www-data /var/www/espwebux2015
# chmod -R 755 /var/www/espwebux2015
# service apache2 restart ; a2ensite espwebux2015
# a2dissite 000-default
# la -la /etc/apache2/sites-enabled
# la -la /etc/apache2/sites-enabled
Ambiente e Infraestrutura WEB
08/04/20
Apache (Worker: Virtual Host)
100
Ambiente e Infraestrutura WEB
08/04/20
Apache (Worker)
Os procedimentos para Certificado e SSL, são os mesmos
descritos para o Prefork.
101
Ambiente e Infraestrutura WEB
08/04/20
Apache (Worker: suexec+fcgi)
Opcional
É possível criar usuários para se executar cada VirtualHost em
uma instância própria via suexec isolando-se versão de php,
FastCGI (inclusive cpanel) e otimizando a utilização de memória e
cpu.
https://www.howtoforge.com/...
102
# dpkg-reconfigure dash → NÃO
# service apparmor stop
# update-rc.d -f apparmor remove
# aptitude remove apparmor apparmor-utils
# vi /etc/php5/cgi/php.ini
...
cgi.fix_pathinfo=1
...
# vi /etc/apache2/mods-available/fcgid.conf
<IfModule mod_fcgid.c>
FcgidConnectTimeout 20
PHP_Fix_Pathinfo_Enable 1
<IfModule mod_mime.c>
AddHandler fcgid-script .fcgi
</IfModule>
</IfModule>
Ambiente e Infraestrutura WEB
08/04/20
Apache (Worker: suexec+fcgi)
103
# groupadd espwebux2015
# useradd -s /bin/false -d /var/www/espwebux2015 -m -g 
espwebux2015
# mkdir -p /var/www/espwebux2015/scripts
# chown -R espwebux2015:espwebux2015 /var/www/espwebux2015/
# chmod -R 755 /var/www/espwebux2015/
# service apache2 restart
# su – espwebux2015 -c /usr/lib/apache2/suexec -V
Ambiente e Infraestrutura WEB
08/04/20
Apache (Worker: suexec+fcgi)
104
# mkdir /var/www/espwebux2015/scripts
# chown espwebux2015:espwebux2015 
/var/www/espwebux2015/scripts
# chmod -R 755 /var/www/espwebux2015/scripts
# vi /var/www/espwebux2015/scripts/php-fcgi-starter
#!/bin/sh
PHPRC=/etc/php5/cgi
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/bin/php-cgi
# apt-get install apache2-suexec
# a2dismod php5;
# a2enmod suexec ; a2enmod fcgid
# a2enmod deflate ; a2enmod rewrite ; a2enmod include
# a2ensite espwebux2015
# service apache2 restart
Ambiente e Infraestrutura WEB
08/04/20
Apache (Worker: suexec+fcgi)
105
# vi /etc/apache2/sites-available/espwebux2015.conf
<VirtualHost *:80>
SuexecUserGroup espwebux2015 espwebux2015
ServerName espwebux2015.com
ServerAlias www.espwebux2015.com espwebux2015.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/espwebux2015
<Directory /var/www/espwebux2015>
Options +ExecCGI
AllowOverride All
AddHandler fcgid-script .php
FCGIWrapper /var/www/espwebux2015/scripts/php-fcgi-
starter .php
Order allow,deny
Allow from all
</Directory>
ServerSignature Off
</VirtualHost>
Ambiente e Infraestrutura WEB
08/04/20
Apache (Worker: suexec+fcgi)
106
Ambiente e Infraestrutura WEB
08/04/20
Apache Event
107
# apt-get install libapache2-mod-fastcgi php5-fpm 
apache2-mpm-event
# vi /etc/apache2/conf-available/php5-fpm.conf
<IfModule mod_fastcgi.c>
AddHandler php5-fcgi .php
Action php5-fcgi /php5-fcgi
Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi  -
socket /var/run/php5-fpm.sock -pass-header Authorization
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
</IfModule>
# apt-get install php5-mysql OU
# apt-get install php5-pgsql
Ambiente e Infraestrutura WEB
08/04/20
Apache (Event: instalação)
108
# vi /etc/apache2/mods-enabled/mpm_event.conf
<IfModule mpm_event_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>
Ambiente e Infraestrutura WEB
08/04/20
Apache (Event: configuração)
109
# a2enmod actions fastcgi alias
# a2dismod mpm_prefork php5
# a2enconf php5-fpm
# a2enmod mpm_event
# service apache2 restart
Ambiente e Infraestrutura WEB
08/04/20
Apache (Event: instalação)
Descarga de módulos
antigos, carga de
novas configurações e
módulos.
110
Ambiente e Infraestrutura WEB
08/04/20
Apache (Event: configuração)
# vi /etc/apache2/apache2.conf
#Worker MPM
<IfModule worker.c>
StartServers 10
MinSpareServers 10
MaxSpareServers 25
ServerLimit 180
MaxClients 180
MaxRequestsPerChild 200
MaxKeepAliveRequests 500
KeepAliveTimeout 5
</IfModule> Resolvido no mpm-event
111
Ambiente e Infraestrutura WEB
08/04/20
Apache (Event)
Os procedimentos para Virtual Host, Certificado e SSL, são os
mesmos descritos para o Prefork.
112
Ambiente e Infraestrutura WEB
08/04/20
Comandos úteis
113
Ambiente e Infraestrutura WEB
08/04/20
Apache (Comandos úteis)
●
a2enmod: habilita um módulo (se disponível em
/etc/apache2/mods-available)
●
a2dismod: desabilita um módulo ativo (se presente
em '/etc/apache2/mods-enabled')
●
a2ensite: habilita um site (se configurado em
/etc/apache2/sites-available)
●
a2dissite: desabilita um site (se linkado em
●
/etc/apache2/sites-enabled)
●
apache2ctl -v ou curl -I localhost: informações
114
Ambiente e Infraestrutura WEB
08/04/20
Apache (Comandos úteis)
# command type -f 'service' &>'/dev/null' && command 
service 'apache2' 'force-reload'
# command type -f 'service' &>'/dev/null' || 
/etc/init.d/apache2 'force-reload'
# command type -f 'newaliases' &>'/dev/null' && command 
newaliases
# command apache2ctl -t
# command type -f 'service' &>'/dev/null' && command 
service 'apache2' 'reload'
# command type -f 'service' &>'/dev/null' || 
/etc/init.d/apache2 'reload'
Relê as novas configurações sem
para o serviço.
Testa a sintax nos arquivos de
configuração.
Relê novos aliases criados.
Relê as novas configurações.
115
Ambiente e Infraestrutura WEB
08/04/20
Apache (Comandos úteis)
# command type -f 'service' &>'/dev/null' && command 
service 'apache2' 'force-reload'
# command type -f 'service' &>'/dev/null' || 
/etc/init.d/apache2 'force-reload'
# command type -f 'service' &>'/dev/null' && command 
service 'apache2' 'restart'
# command type -f 'service' &>'/dev/null' || 
/etc/init.d/apache2 'restart'
# command apache2ctl -t -D DUMP_MODULES
Relê as novas configurações sem
fechar as conexões do clientes.
Relê as novas configurações e
fecha as conexões dos clientes.
Lista os móulos carregados.
116
Ambiente e Infraestrutura WEB
08/04/20
117
Ambiente e Infraestrutura WEB
08/04/20
NGINX: proposta principal
Varnish
NGINX
Apache
MySQLPHP
Estático
Dinâm
ico
118
Ambiente e Infraestrutura WEB
08/04/20
NGINX: propostas alternativas
NGINX
Apache
MySQLPHP
Dinâm
ico
NGINX
MySQLPHP
DinâmicoVarnish Estático Apache
JBOSS
WebSphere
119
Ambiente e Infraestrutura WEB
08/04/20
NGINX: estratégias
Server 1 Server 3
Server 2
Varnish
NGINX
Apache
MySQLPHP
Estático
Dinâm
ico
Server 4
Varnish
NGINX
Apache
MySQLPHP
Estático
Dinâm
ico
Server 1
Server 3
Server 2
Varnish
NGINX Apache
MySQL
PHP
Estático
Server 4
Apache
Apache
Dinâmico
Dinâmico
Dinâmico
Server 5 Server 6
Server EUA
Server 3
Server 2
Varnish
NGINX Apache
MySQL
PHP
Estático
Server 4
Apache
Apache
Dinâmico
Dinâmico
Dinâmico
Server 5 Server 6
Varnish
Estático
Server Brasil
120
Ambiente e Infraestrutura WEB
08/04/20
NGINX
Nginx é um servidor web de código aberto escrito para resolver
alguns dos problemas de desempenho e escalabilidade
associados ao Apache.
Nginx diz que seu servidor web foi escrito para resolver o
problema C10K, que é uma referência a um artigo escrito por
Daniel Kegel sobre como obter um servidor web para lidar com
10.000 conexões, dadas as limitações dos sistemas operacionais.
Em seu artigo, ele citou um paper de Dean Gaudet, que diz: “Why
don't you guys use a select/event based model like Zeus? It's
clearly the fastest”.
121
Ambiente e Infraestrutura WEB
08/04/20
NGINX
Nginx é composto por módulos que estão incluídos em tempo de
compilação. Isso significa que o usuário faz o download do
código-fonte e seleciona quais módulos vai compilar. Existem
módulos de conexão para fazer servidores de aplicação, proxy e
balanceamento de carga entre outros. Não há nenhum módulo de
PHP pois o Nginx pode compilar o código PHP sozinho.
122
Ambiente e Infraestrutura WEB
08/04/20
NGINX (Diagrama de arquitetura)
Neste diagrama vemos que Nginx, neste caso, está usando o
processo FastCGI para executar Python, Ruby, ou outro código
além de gerenciar o armazenamento de objetos em cache (loader/
manager)
123
Ambiente e Infraestrutura WEB
08/04/20
NGINX (Instalação)
# apt-cache show nginx
# vi /etc/apt/sources.list
...
### DotDeb ###
deb http://packages.dotdeb.org stable all
deb-src http://packages.dotdeb.org stable all
# mkdir ~/Downloads ; cd ~/Downloads
# wget http://www.dotdeb.org/dotdeb.gpg
# cat dotdeb.gpg | apt-key add -
# apt-get update
# apt-get install nginx php5-fpm php-pear
# cd /etc/nginx
# cp -pa nginx.conf nginx.conf.ori
# apt-cache show nginx | grep Version
Será exibido o pacote do repositório
“oficial” em uma versão mais antiga.
Se quiser utilizar
versões mais
novas, adicione
o repositório da
DotDeb.
Observe que a
versão disponível
no repositório da
DotDeb é mais
nova.
124
Ambiente e Infraestrutura WEB
08/04/20
NGINX (Ajustes)
# vi /etc/nginx/nginx.conf
user www-data;
worker_process 4;
#worker_cpu_affinity 0001 0010 0100 1000;
worker_priority -5;
events {
#use epoll;
worker_connections 256;
#multi_accept on;
}
... (continua no próximo slide)
Conforme quantidade de Cores de CPU's.
Variar entre -4 e 0 (-20 maior ~ 19 menor)
Valor de memória
utilizado (monitorar e
ajustar).
Seleciona o modelo de fila
de atendimento de
requisições.
Valores: select, poll,
kqueue, epoll, rtsig,
/dev/poll e eventport
Desativar na VM.
125
Ambiente e Infraestrutura WEB
08/04/20
NGINX (Ajustes)
http {
...
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
...
keepalive_timeout 30;
reset_timedout_connection on;
client_body_timeout 10;
send_timeout 2;
...
}
http://nginx.org/en/docs/http/ngx_http_core_module.html
126
Ambiente e Infraestrutura WEB
08/04/20
NGINX (Criar site)
# cd /etc/nginx/sites-available/
# cp -pa default espwebux2015
# vi espwebux2015
server {
Listen 8181;
server_name espwebux2015.com;
root /var/www/espwebux2015;
index index.html index.php;
...
# setup logging
access_log /var/log/nginx/access_espwebux2015.log;
error_log /var/log/nginx/error_espwebux2015.log;
}
...
# cd ../sites-enabled
# rm default
# ln -s ../sites-available/espwebux2015 Ativar o site.
127
Ambiente e Infraestrutura WEB
08/04/20
NGINX (Criar site)
# vi /etc/nginx/sites-available/default
...
Listen 8181;
...
# vi /etc/nginx/sites-available/espwebux2015
...
server {
...
location ~ .php$ {
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME
$document_root$fastcgi_script_name;
include fastcgi_params;
}
...
Configurar o PHP.
128
Ambiente e Infraestrutura WEB
08/04/20
NGINX (Criar site)
# vi /var/www/espwebux2015/info.php
<?php
phpinfo();
?>
# chown www-data:www-data –R /var/www
# chmod 644 –R /var/www
# /etc/init.d/nginx restart
# /etc/init.d/php5-fpm restart
Criar o arquivo PHP.
129
# mkdir /etc/nginx/cert
# cd /etc/ngins/cert
# openssl genrsa -des3 -out espwebux2015_nginx_cert.key 
2048
# openssl rsa -in espwebux2015_nginx_cert.key -out 
espwebux2015_nginx_cert_nopwd.key
# chmod 600 
espwebux2015_nginx_cert_nopwd.key
# openssl req -new -key 
espwebux2015_nginx_cert.key -out 
espwebux2015_nginx_cert.csr
# openssl x509 -req -days 365 -in 
espwebux2015_nginx_cert.csr -signkey 
espwebux2015_nginx_cert.key -out 
espwebux2015_nginx_cert.crt
Ambiente e Infraestrutura WEB
08/04/20
NGINX (Certificado)
Gerar a chave privada (Private Key)
Remove a senha da chave privada
Gerar o pedido de certificação
(Certificate Signing Request).
OBS: O Common Name
solicitado deverá ter o mesmo
nome do servidor (ex:
host.dominio.com.br)
Assinar o certificado
(Self-Signed
Certificate):
130
Ambiente e Infraestrutura WEB
08/04/20
NGINX (SSL: append ao arq. do site)
server {
listen 8181;
server_name espwebux2015.com;
root /var/www/espwebux2015;
index index.php;
# setup logging
access_log /var/log/nginx/access_espwebux2015_ssl.log;
error_log /var/log/nginx/error_espwebux2015_ssl.log;
location ~ .php$ {
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
include fastcgi_params;
}
# SSL
ssl on;
ssl_certificate /etc/nginx/cert/espwebux2015.crt; ou .pem
ssl_certificate_key 
/etc/nginx/cert/espwebux2015_nopwd.key;
}
131
Ambiente e Infraestrutura WEB
08/04/20
NGINX (Ativar e reiniciar)
# cd /etc/nginx/sites-enabled/
# ln -s ../sites-available/espwebux2015
# /etc/init.d/nginx restart
# /etc/init.d/php5-fpm restart
132
Ambiente e Infraestrutura WEB
08/04/20
+
133
Ambiente e Infraestrutura WEB
08/04/20
NGINX (Modificações: Apache)
# cp -pa /var/www/espwebux2015 
/var/www/espwebux2015.apache
# cd /var/www/espwebux2015.apache
# rm -rf scripts index.html
# cd ../espwebux2015 ; rm phpinfo.php
# vi index.html
# vi /etc/apache2/ports.conf
NameVirtualHost *:8080
Listen 8080
# vi /etc/apache2/sites-enabled/espwebux2015
<VirtualHost *:8080>
...
DocumentRoot /var/www/espwebux2015.apache
<Directory /var/www/espwebux2015.apache/>
...
Realizar as instalações do NGINX e Apache2-mpm-prefork
/worker normalmente (Mesma máquina).
Renomear a pasta padrão do
apache.
Alterar a porta de escuta.
Alterar o arquivo do site.
Remover a chamada ao
phpinfo.php
134
Ambiente e Infraestrutura WEB
08/04/20
NGINX (Modificações: NGINX)
# vi /etc/nginx/sites-enabled/espwebux2015
location ~ .php$ {
...
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8080;
...
}
Redirecionamento para
o Apache.
135
Ambiente e Infraestrutura WEB
08/04/20
NGINX (balanceamento de carga)
Opcional
É possível utilizar a ideia de um pool de servidores apache para a
balanceamento de carga.
NGINX DinâmicoVarnish Estático Apache
Apache
Apache
Dinâm
ico
Dinâm
ico
136
Ambiente e Infraestrutura WEB
08/04/20
NGINX (Modificações: NGINX)
# vi /etc/nginx/sites-enabled/espwebux2015
location ~ .php$ {
...
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://apaches;
...
}
# Pool
upstream apaches {
server ipdoserver1:8081;
server ipdoserver2:8082;
server ipdoserver3:8083;
}
Fora da TagServer
Realizar as instalações do NGINX e Apache2-mpm-prefork
normalmente (Máquinas separadas).
137
Ambiente e Infraestrutura WEB
08/04/20
+
+
138
Ambiente e Infraestrutura WEB
08/04/20
NGINX + VARNISH + Apache
# vi /etc/nginx/sites-enabled/espwebux2015
listen 8181;
...
# apt-get install varnish
# apt-get install libapache2-mod-rpaf
# cd /etc/varnish
# cp -pa default.vcl default.vcl.ori
# vi /etc/varnish/default.vcl
backend default {
.host = “127.0.0.1”;
.port = “8181”;
}
Alterar a porta do NGINX
de 80 para 8181.
Instalar o Varnish.
Alterar o trecho abaixo
no default.vcl com segue
no exemplo:
backend default {
.host = “127.0.0.1”;
.port = “8080”;}
139
Ambiente e Infraestrutura WEB
08/04/20
NGINX + VARNISH + Apache
# vi /etc/default/varnish
...
START=yes
...
### ALTERNATIVE 2 ###
DAEMON_OPTS=“-a :6081 
-T localhost: 6082 
-f /etc/varnish/default.vcl 
-S /etc/varnish/secret 
-s
file,/var/lib/varnish/$INSTANCE/varnish_storage.bin,1G”
...
140
Ambiente e Infraestrutura WEB
08/04/20
NGINX + VARNISH + Apache
...
### ALTERNATIVE 3 ###
VARNISH_VCL_CONF=/etc/varnish/default.vcl
VARNISH_LISTEN_PORT=80
VARNISH_MIN_THREADS=1
VARNISH_MAX_THREADS=1000
VARNISH_THREAD_TIMEOUT=60
VARNISH_STORAGE_FILE=/var/lib/varnish/$INSTANCE/
varnish_storage.bin
VARNISH_STORAGE_SIZE=2G
VARNISH_SECRET_FILE=/etc/varnish/secret
VARNISH_STORAGE=“file,${VARNISH_STORAGE_FILE},$
{VARNISH_STORAGE_SIZE}”
VARNISH_TTL=20
DAEMON_OPTS=...
# /etc/init.d/varnish restart
Tempo de atualização do cache.
Alternative 1, 2 ou 3
141
Ambiente e Infraestrutura WEB
08/04/20
142
Ambiente e Infraestrutura WEB
08/04/20
MySQL (Instalação)
# apt-get install mysql-server
# apt-get install php5-mysql
# apt-get install phpmyadmin
Informe uma senha para o mysql
(pode ser nula). Recomenda-se
que não seja a de root ou
administrador.
Selecionar o Servidor Web
Selecionar YES para configurar o
PHPMyAdmin
Abrir o PHPMyAdmin no
navegador
http://ip_server/phpmyadmin
143
Ambiente e Infraestrutura WEB
08/04/20
MySQL (PHP PGAdmin)
# vi /etc/php5/conf.d/suhosin.ini
suhosin.sql.bailout_on_error = off
suhosin.post.max_array_index_length = 256
suhosin.post.max_totalname_length = 8192
suhosin.post.max_vars = 2048
suhosin.request.max_array_index_length = 256
suhosin.request.max_totalname_length = 8192
suhosin.request.max_vars  = 2048
Otimizar configurações do PHP
para o PHPPGAdmin
Descomentar e Alterar os
seguintes parâmetros.
OBS: o Suhosin corrige diversas
brechas de segurança.
144
Ambiente e Infraestrutura WEB
08/04/20
145
Ambiente e Infraestrutura WEB
08/04/20
PostgreSQL (Instalação/Configuração)
# apt-get install postgresql php5-pgsql phppgadmin
# vi /etc/phppgadmin/config.inc.php 
$conf['servers'][0]['host'] = 'localhost';
$conf['servers'][0]['defaultdb'] = 'postgres';
# su - postgres 
$ createuser -P nome-do-usuario 
$ logout
# vi /etc/postgresql/X.Y/main/postgresql.conf 
listen_addresses = '*'
146
Ambiente e Infraestrutura WEB
08/04/20
PostgreSQL (Instalação/Configuração)
# vi /etc/postgresql/8.4/main/pg_hba.conf 
#"local" is for Unix domain socket connections only
#local all all ident sameuser 
...
# IPv4 local connections:
host all all 0.0.0.0/0 md5
# vi /etc/phppgadmin/apache.conf 
allow from all
# /etc/init.d/apache2 restart
# /etc/init.d/postgresql restart
Comente (#)
Abrir o PHPMyAdmin no navegador
http://ip_server/phppgadmin
147
# ps aux | fgrep -i apache
# apache2 -V
Ambiente e Infraestrutura WEB
08/04/20
Prática 1 (Apache: comandos úteis)
Observe que na primeira
linha o usuário usado para
“startar” o serviço (Ss) foi
root, mas as demais
instâncias (S) são do próprio
apache (www-data).
Este relatório fornece
diversas informações sobre
o MPM.
148
Ambiente e Infraestrutura WEB
08/04/20
Benchmark
149
# siege http://www.espwebux2015.com -c 100 -r 100
...
HTTP/1.1 200 0.00 secs: 148 bytes ==> GET /
done.
Transactions: 10000 hits
Availability: 100.00 %
Elapsed time: 63.46 secs
Data transferred: 1.41 MB
Response time: 0.00 secs
Transaction rate: 157.58 trans/sec
Throughput: 0.02 MB/sec
Concurrency: 0.54
Successful transactions: 10000
Failed transactions: 0
Longest transaction: 0.19
Shortest transaction: 0.00
FILE: /var/siege.log
You can disable this annoying message by editing
the .siegerc file in your home directory; change
the directive 'show-logfile' to false.
Ambiente e Infraestrutura WEB
08/04/20
Benchmark
SIEGE (GET)
150
Ambiente e Infraestrutura WEB
08/04/20
Benchmark
HTOP
AntesDepois
151
Ambiente e Infraestrutura WEB
08/04/20
A importância do tunning de SO
Abaixo a saída do console do terminal utilizado com o siege
mostra que houve um estouro no número máximo de arquivos
abertos, ou seja, foram abertos simultaneamente mais arquivos
do que estava estipulado na variável open files.
152
# siege -b -t60S http://www.espwebux2015.com
...
[error] socket: 71800576 address is unavailable.: Cannot assign requested address
[error] socket: 105371392 address is unavailable.: Cannot assign requested address
[error] socket: 113764096 address is unavailable.: Cannot assign requested address
HTTP/1.1 200 0.01 secs: 148 bytes ==> GET /
done.
siege aborted due to excessive socket failure; you
can change the failure threshold in $HOME/.siegerc
Transactions: 30637 hits
Availability: 96.73 %
Elapsed time: 20.59 secs
Data transferred: 4.32 MB
Response time: 0.01 secs
Transaction rate: 1487.96 trans/sec
Throughput: 0.21 MB/sec
Concurrency: 13.07
Successful transactions: 30637
Failed transactions: 1037
Longest transaction: 0.21
Shortest transaction: 0.00
FILE: /var/siege.log
You can disable this annoying message by editing
the .siegerc file in your home directory; change
the directive 'show-logfile' to false.
Ambiente e Infraestrutura WEB
08/04/20
Benchmark
SIEGE (Benchmark)
153
# siege -c50 -d10 -t3M http://www.espwebux2015.com
...
HTTP/1.1 200 0.01 secs: 148 bytes ==> GET /
HTTP/1.1 200 0.01 secs: 148 bytes ==> GET /
^C
Lifting the server siege... done.
Transactions: 496 hits
Availability: 100.00 %
Elapsed time: 50.03 secs
Data transferred: 0.07 MB
Response time: 0.00 secs
Transaction rate: 9.91 trans/sec
Throughput: 0.00 MB/sec
Concurrency: 0.02
Successful transactions: 496
Failed transactions: 0
Longest transaction: 0.02
Shortest transaction: 0.00
FILE: /var/siege.log
You can disable this annoying message by editing
the .siegerc file in your home directory; change
the directive 'show-logfile' to false.
Ambiente e Infraestrutura WEB
08/04/20
Benchmark
SIEGE (Loading)
154
# ab2 -n 100 -C 
SESSf4cc9d1482f4b260feeb9d88f77cd643=5ed9338d0b55fe9a35c58f 
8093d5e15e http://www.espwebux2015.com:80/
Ambiente e Infraestrutura WEB
08/04/20
Benchmark
Apache Benchmark (exemplos)
# ab2 -c 1000 -n 1000 http://www.espwebux2015.com:80/
# ab2 -n 10000 -C SESS7...9=24...1 
http://www.espwebux2015.com:80/
# ab2 -k -n 50000 -c 2 -e apache.cvs 
http://www.espwebux2015.com:80/index.html
155
Ambiente e Infraestrutura WEB
08/04/20
Benchmark (Ferramentas)
●
Google Web Toolkit
●
Apache Jmeter
●
Página com várias ferramentas listadas
●
Open Web Application Security Project (OWASP)
●
http://www.webpagetest.org/
156
Ambiente e Infraestrutura WEB
08/04/20

Criar conta;

Criar instância EC2 T2.Micro com o Ubuntu 14.04 AMD64 (utilize o ponto de
presença de São Paulo preferencialmente);

Associar um Elastic IP a mesma instância;

Liberar as portas 22, 80, 443, 3306, 8181 (Nginx), 8080 (Apache http), 8081
(Apache https);

Criar e importar Key Pair para acesso ssh;

Converter via PuttyGen a chave .pem para .ppk;

Acessar via ssh e instalar conforme a proposta principal do slide 117 (Web
Varnish Nginx Apache).→ → →
157
Ambiente e Infraestrutura WEB
08/04/20

Mais conteúdo relacionado

Semelhante a Infraestrutura Web

Apresentação Eletro 5ºano
Apresentação Eletro 5ºanoApresentação Eletro 5ºano
Apresentação Eletro 5ºanoBruno Pereira
 
Apresentação (final) (2003) projecto 5ano electro
Apresentação  (final)  (2003) projecto 5ano electroApresentação  (final)  (2003) projecto 5ano electro
Apresentação (final) (2003) projecto 5ano electroBruno Pereira
 
Explicando segurança e privacidade com Wireshark (2017)
Explicando segurança e privacidade com Wireshark (2017)Explicando segurança e privacidade com Wireshark (2017)
Explicando segurança e privacidade com Wireshark (2017)Euler Neto
 
Aula01 - protocolos da camada de aplicação
Aula01 - protocolos da camada de aplicaçãoAula01 - protocolos da camada de aplicação
Aula01 - protocolos da camada de aplicaçãoCarlos Veiga
 
Visão geral dos novos produtos da Cloudflare
Visão geral dos novos produtos da CloudflareVisão geral dos novos produtos da Cloudflare
Visão geral dos novos produtos da CloudflareCloudflare
 
Desenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyDesenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyRelsi Maron
 
Artigo Atividade 1 Gredes
Artigo Atividade 1 GredesArtigo Atividade 1 Gredes
Artigo Atividade 1 GredesAlbarado Junior
 
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaTDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaCleber Dantas
 
Programação Dinâmica para Web - Aula 1
Programação Dinâmica para Web - Aula 1Programação Dinâmica para Web - Aula 1
Programação Dinâmica para Web - Aula 1Thyago Maia
 
TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...
TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...
TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...JP Clementi
 
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...Mauro Risonho de Paula Assumpcao
 
Desenvolvimento de sistemas jurídicos
Desenvolvimento de sistemas jurídicosDesenvolvimento de sistemas jurídicos
Desenvolvimento de sistemas jurídicosAndre Camilo
 
Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Marcelo Dieder
 
1º Artigo De GerêNcia De Redes
1º Artigo De GerêNcia De Redes1º Artigo De GerêNcia De Redes
1º Artigo De GerêNcia De Redesmanustm
 

Semelhante a Infraestrutura Web (20)

Um pouco sobre APIs
Um pouco sobre APIsUm pouco sobre APIs
Um pouco sobre APIs
 
O get and post para etico hacker
O get and post para etico hackerO get and post para etico hacker
O get and post para etico hacker
 
Apresentação Eletro 5ºano
Apresentação Eletro 5ºanoApresentação Eletro 5ºano
Apresentação Eletro 5ºano
 
Apresentação (final) (2003) projecto 5ano electro
Apresentação  (final)  (2003) projecto 5ano electroApresentação  (final)  (2003) projecto 5ano electro
Apresentação (final) (2003) projecto 5ano electro
 
Explicando segurança e privacidade com Wireshark (2017)
Explicando segurança e privacidade com Wireshark (2017)Explicando segurança e privacidade com Wireshark (2017)
Explicando segurança e privacidade com Wireshark (2017)
 
Aula01 - protocolos da camada de aplicação
Aula01 - protocolos da camada de aplicaçãoAula01 - protocolos da camada de aplicação
Aula01 - protocolos da camada de aplicação
 
Visão geral dos novos produtos da Cloudflare
Visão geral dos novos produtos da CloudflareVisão geral dos novos produtos da Cloudflare
Visão geral dos novos produtos da Cloudflare
 
Desenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyDesenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2py
 
Artigo Atividade 1 Gredes
Artigo Atividade 1 GredesArtigo Atividade 1 Gredes
Artigo Atividade 1 Gredes
 
Alex Vitola
Alex VitolaAlex Vitola
Alex Vitola
 
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaTDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
 
Programação Dinâmica para Web - Aula 1
Programação Dinâmica para Web - Aula 1Programação Dinâmica para Web - Aula 1
Programação Dinâmica para Web - Aula 1
 
TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...
TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...
TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...
 
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
 
Desenvolvimento de sistemas jurídicos
Desenvolvimento de sistemas jurídicosDesenvolvimento de sistemas jurídicos
Desenvolvimento de sistemas jurídicos
 
Projeto de Rede Local (LAN)
Projeto de Rede Local (LAN)Projeto de Rede Local (LAN)
Projeto de Rede Local (LAN)
 
Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?
 
Gabrielemiranda
GabrielemirandaGabrielemiranda
Gabrielemiranda
 
Asa cpbr4
Asa cpbr4Asa cpbr4
Asa cpbr4
 
1º Artigo De GerêNcia De Redes
1º Artigo De GerêNcia De Redes1º Artigo De GerêNcia De Redes
1º Artigo De GerêNcia De Redes
 

Mais de Frederico de Figueiredo Siena

Mais de Frederico de Figueiredo Siena (8)

Infraestrutura Hiperconvergente Livre
Infraestrutura Hiperconvergente LivreInfraestrutura Hiperconvergente Livre
Infraestrutura Hiperconvergente Livre
 
Deploy de imagens Microsoft Windows 10 com FOG
Deploy de imagens Microsoft Windows 10 com FOGDeploy de imagens Microsoft Windows 10 com FOG
Deploy de imagens Microsoft Windows 10 com FOG
 
Análise e reformulação da página inicial do site uel.br com base nas premissa...
Análise e reformulação da página inicial do site uel.br com base nas premissa...Análise e reformulação da página inicial do site uel.br com base nas premissa...
Análise e reformulação da página inicial do site uel.br com base nas premissa...
 
Controle de versões com o Subversion
Controle de versões com o SubversionControle de versões com o Subversion
Controle de versões com o Subversion
 
Semana de Planejamento 2011 - Departamento de Ensino UTFPR Londrina
Semana de Planejamento 2011 - Departamento de Ensino UTFPR LondrinaSemana de Planejamento 2011 - Departamento de Ensino UTFPR Londrina
Semana de Planejamento 2011 - Departamento de Ensino UTFPR Londrina
 
Apresentação insight
Apresentação insightApresentação insight
Apresentação insight
 
Open Document Format Para a Administração Pública
Open Document Format Para a Administração PúblicaOpen Document Format Para a Administração Pública
Open Document Format Para a Administração Pública
 
OpenOffice v2.2
OpenOffice v2.2OpenOffice v2.2
OpenOffice v2.2
 

Infraestrutura Web

  • 1. 1 Especialização em Desenvolvimento Web08/04/20 AMBIENTE E INFRAESTRUTURA Frederico F. Siena fredericosiena@utfpr.edu.br
  • 2. 2 Ambiente e Infraestrutura WEB 08/04/20 Objetivos desta disciplina Capacitar o aluno a planejar e implementar uma infraestrutura mínima para a execução de aplicações web seguindo os padrões abertos da W3C de maneira segura e escalável em ambiente próprio ou locado.
  • 3. 3 Ambiente e Infraestrutura WEB 08/04/20 Aptidões almejadas  Instalar e configurar uma distribuição GNU/Linux;  Instalar e configurar os servidores web Apache (com suporte a PHP5), Nginx e Varnish;  Instalar e customizar os SGBDs MySQL e PostgreSQL;
  • 4. 4 Ambiente e Infraestrutura WEB 08/04/20 Aptidões almejadas  Utilizar appliances prontos para cada necessidade;  Gerir ambientes na Amazon Web Services®;  Realizar testes de para conferir a homologação de um ambiente seguro.
  • 5. 5 Ambiente e Infraestrutura WEB 08/04/20 Programação 21/02/2015  Teoria ✔ Arquitetura Cliente/Servidor ✔ Protocolo TCP/IP ✔ Protocolo HTTP ✔ Servidores WEB ✔ Módulos para servidores WEB ✔ Banco de Dados (mySQL/pgSQL) ✔ Hardware vs Tunning
  • 6. 6 Ambiente e Infraestrutura WEB 08/04/20 Programação 21/02/2015  Teoria ✔ Virtualização com o VirtualBox ➢ Preparação de ambiente ➢ Provisionamento e deploy ✔ GNU/Linux ➢ Noções básicas do SO Ubuntu ➢ Editando arquivos com o VI ➢ Entendendo a distribuição de pacotes do Ubuntu
  • 7. 7 Ambiente e Infraestrutura WEB 08/04/20 Pegue seu café e mantenha-se acordado
  • 8. 8 Ambiente e Infraestrutura WEB 08/04/20 Arquitetura Cliente/Servidor “É uma abordagem da computação que separa os processos em plataformas independentes que interagem, permitindo que os recursos sejam compartilhados enquanto se obtém o máximo de benefício de cada dispositivo diferente, ou seja, Cliente/ Servidor é um modelo lógico”. VASKEVITCH, (1995, pág. 375).
  • 9. 9 Ambiente e Infraestrutura WEB 08/04/20 Arquitetura Cliente/Servidor Segundo Hulquist (HULQUIST,1997) apud Salemi (SALEMI,1993) este modelo é caracterizado como segue:
  • 10. 10 Ambiente e Infraestrutura WEB 08/04/20 Cliente Também denominado de “front-end” e “WorkStation”, é um processo que interage com o usuário através de uma interface gráfica ou não, permitindo consultas ou comandos para recuperação de dados e análise e representando o meio pela qual os resultados são apresentados.
  • 11. 11 Ambiente e Infraestrutura WEB 08/04/20 Servidor Também denominado “back-end”, fornece determinado (s) serviço (s) que fica (m) disponível (eis) para todo cliente que o requisite. A natureza e escopo do serviço são definidos pelo objetivo da aplicação Cliente/Servidor. Além disso, ele apresenta ainda algumas propriedades distintas:
  • 12. 12 Ambiente e Infraestrutura WEB 08/04/20 Servidor  É o processo reativo na relação Cliente/ Servidor.  Possui uma execução contínua.  Recebe e responde às solicitações de diversos Clientes.  Presta serviços distribuídos.
  • 13. 13 Ambiente e Infraestrutura WEB 08/04/20 Vantagens ✔ Confiabilidade ✔ Centralização e Segurança ✔ Escalabilidade ✔ Independência de Plataforma e SO
  • 14. 14 Ambiente e Infraestrutura WEB 08/04/20 Desvantagens ✔ Sobrecarga ✔ Gerenciamento ✔ Heterogeneidade
  • 15. 15 Ambiente e Infraestrutura WEB 08/04/20 Modelo 2 Camadas
  • 16. 16 Ambiente e Infraestrutura WEB 08/04/20 Modelo 3 Camadas
  • 17. 17 Ambiente e Infraestrutura WEB 08/04/20 Modelo 3/4 Camadas (web)
  • 18. 18 Ambiente e Infraestrutura WEB 08/04/20 TCP / IP O TCP é um protocolo de nível da camada de transporte (camada 4) do Modelo OSI e é sobre o qual que se assentam a maioria das aplicações, como o SSH, FTP, HTTP.
  • 19. 19 Ambiente e Infraestrutura WEB 08/04/20 TCP / IP Orientado à conexão A aplicação envia um pedido de conexão para o destino e usa a "conexão" para transferir dados. Ponto a ponto Uma conexão TCP é estabelecida entre dois pontos.
  • 20. 20 Ambiente e Infraestrutura WEB 08/04/20 TCP / IP Confiabilidade Possibilita a recuperação de pacotes perdidos, eliminação de duplicados, a recuperação de dados corrompidos e pode restabelecer ao encontrar problemas de meio. Full Duplex Transferência simultânea em ambas direções durante toda a sessão.
  • 21. 21 Ambiente e Infraestrutura WEB 08/04/20 TCP / IP Handshake Mecanismo de estabelecimento e finalização de conexão a três e quatro tempos, respectivamente, o que permite a autenticação e encerramento de uma sessão completa. O TCP garante que, no final da conexão, todos os pacotes foram bem recebidos.
  • 22. 22 Ambiente e Infraestrutura WEB 08/04/20 TCP / IP Controle de Fluxo O TCP usa o campo janela ou window para controlar o fluxo. O receptor, à medida que recebe os dados, envia mensagens ACK (=Acknowledgement), confirmando a recepção de um segmento. Em resumo, elimina a possibilidade do remetente sobrecarregar o destinatário.
  • 23. 23 Ambiente e Infraestrutura WEB 08/04/20 TCP / IP O TCP/IP, é formado por um grande conjunto de diferentes protocolos de rede. Ele deriva dos dois protocolos mais importantes e mais utilizados, que são os seguintes:  TCP (Transmission Control Protocol)  IP (Internet Protocol)
  • 24. 24 Ambiente e Infraestrutura WEB 08/04/20 TCP / IP TCP (transporte) Protocolo de transporte. Executa importantes funções para garantir que os dados sejam entregues de uma maneira confiável. IP (rede) Protocolo de rede. Responsável pelo endereçamento e roteamento. Provê meios para estabelecer um caminho entre origem e destino
  • 25. 25 Ambiente e Infraestrutura WEB 08/04/20 TCP / IP
  • 26. 26 Ambiente e Infraestrutura WEB 08/04/20 Cabeçalho IP
  • 27. 27 Ambiente e Infraestrutura WEB 08/04/20 Cabeçalho IPv4
  • 28. 28 Ambiente e Infraestrutura WEB 08/04/20 HTTP HyperText Transfer Protocol Protocolo de comunicação mantido pelo W3C utilizado para sistemas de informação de hipermídia distribuídos e colaborativos. Seu uso surgiu da necessidade de distribuir informações pela rede de maneira padronizada para a obtenção de recursos interligados, o que culminou o surgimento da World Wide Web.
  • 29. 29 Ambiente e Infraestrutura WEB 08/04/20 HTTP É um protocolo de aplicação responsável pelo tratamento de pedidos e respostas entre cliente e servidor na Internet através do uso de regras básicas.
  • 30. 30 Ambiente e Infraestrutura WEB 08/04/20 HTTP Um programa requisitante (cliente) estabelece uma conexão com um outro programa receptor (servidor) e envia-lhe uma requisição, contendo a URI, a versão do protocolo, uma mensagem MIME contendo os modificadores da requisição, informações sobre o cliente e, possivelmente, o conteúdo no corpo da mensagem.
  • 31. 31 Ambiente e Infraestrutura WEB 08/04/20 Métodos HTTP  GET: Solicita algum recurso por meio do protocolo HTTP.  HEAD: Variação do GET. Obtém somente o cabeçalho da resposta.  POST: Envia dados para serem processados para o recurso especificado.
  • 32. 32 Ambiente e Infraestrutura WEB 08/04/20 Métodos HTTP  PUT: Envia certo recurso (Upload).  DELETE: Exclui o recurso.  TRACE: Ecoa o pedido, de maneira que o cliente possa saber o que os servidores intermediários estão mudando em seu pedido.
  • 33. 33 Ambiente e Infraestrutura WEB 08/04/20 Métodos HTTP  OPTIONS: Recupera os métodos HTTP que o servidor aceita.  CONNECT: Serve para uso com um proxy que possa se tornar um túnel SSL (um túnel pode ser usado, por exemplo, para criar uma conexão segura).
  • 34. 34 Ambiente e Infraestrutura WEB 08/04/20 Métodos HTTP (get) telnet www.google.com 80 Trying 64.233.163.104... Connected to www.l.google.com. Escape character is '^]'. GET / HTTP/1.1 HTTP/1.1 302 Found Location: http://www.google.com.br/ Cache-Control: private Content-Type: text/html; charset=UTF-8 Set-Cookie: PREF=ID=c828845416419fb6:TM=1271466117:LM=1271466117:S=xWBi4aTDqXGboVMI; expires=Mon, 16-Apr-2012 01:01:57 GMT; path=/; domain=.google.com Set-Cookie: NID=33=rLLQbMPjTqBPKgAPbtfIs4AvjR4umT7D9zd4Qj_nev7qqyHdsqb9gq9DkDRzljiLAFMtdvCPcHf u6TFzdtZAcxCciOwt4s9gxsD96Ya1myHU93tJiTIHJZs0zbCoUdZy; expires=Sun, 17-Oct-2010 01:01:57 GMT; path=/; domain=.google.com; HttpOnly Date: Sat, 17 Apr 2010 01:01:57 GMT Server: gws Content-Length: 222 <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8“> <TITLE>302 Moved</TITLE></HEAD><BODY> <H1>302 Moved</H1> The document has moved <A HREF=http://www.google.com.br/>here</A>. </BODY></HTML>
  • 35. 35 Ambiente e Infraestrutura WEB 08/04/20 Métodos HTTP (post) POST /diretorio/arquivo.html HTTP/1.1 Host: www.exemplo.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; pt-BR; rv:1.9.2b5) Gecko/20091204 Firefox/3.6b5 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: pt-br,pt;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-alive: 115 Cookie: nome=valor; nome2=valor2 Connection: keep-alive Content-Length: 28 usuario=exemplo&senha=123456
  • 36. 36 Ambiente e Infraestrutura WEB 08/04/20 Conexões HTTP HTTP / 1.0 – Stateless As conexões entre um cliente e um servidor são encerradas após o envio de cada requisição ou resposta. Cada vez que uma conexão é estabelecida ou encerrada, é consumida uma grande quantidade de tempo da CPU, largura de banda e memória.
  • 37. 37 Ambiente e Infraestrutura WEB 08/04/20 Conexões HTTP HTTP / 1.1 – Persistent Possibilita que uma conexão seja estabelecida para enviar várias requisições em sequência sem a necessidade de esperar por cada resposta, no qual serão recebidas na mesma ordem em que as solicitações foram enviadas, um processo chamado de pipelining.
  • 38. 38 Ambiente e Infraestrutura WEB 08/04/20 Conexões HTTP CLIENTE SERVIDOR CLOSE OPEN TEMPO CLIENTE SERVIDOR CLOSE OPEN TEMPO CLOSE CLOSE OPEN OPEN HTTP / 1.0 – Stateless HTTP / 1.1 – Persistent
  • 39. 39 Ambiente e Infraestrutura WEB 08/04/20 O tunning faz toda a diferença!
  • 40. 40 Ambiente e Infraestrutura WEB 08/04/20 Tunning vs Velocidade Em 2009 o Google fez um experimento onde expôs a um grupo de usuários uma busca mais lenta. O resultado por página aumentou de 10 para 30, onde o tempo de carregamento foi de 0.4s para 0.9s. Resultado: As buscas diminuíram em 20%. 0,5s
  • 41. 41 Ambiente e Infraestrutura WEB 08/04/20 Tunning vs Velocidade O Yahoo! descobriu que, para cada 400ms de melhora na performance, seu tráfego aumentava em 9%. 400 ms
  • 42. 42 Ambiente e Infraestrutura WEB 08/04/20 Tunning vs Velocidade A Amazon concluiu que apenas 100ms de melhora em seu site, aumentou 1% seu faturamento. 100 ms 1º Trimestre de 2012 = U$ 13,2 Bilhões – 1% = U$132 Milhões 2º Trimestre de 2012 = U$ 12,8 Bilhões – 1% = U$128 Milhões
  • 43. 43 Ambiente e Infraestrutura WEB 08/04/20 Tunning vs Velocidade "If it is fast and ugly, they will use it and curse you; if it is slow, they will not use it" David Cheriton Computer Science Professor Stanford University "Se ele é rápido e feio, eles vão criticar mas vão usá-lo, porém se for lento ninguém irá usá-lo"
  • 44. 44 Ambiente e Infraestrutura WEB 08/04/20 Tunning vs Velocidade "Performance golden rule: Optimize front-end performance first, that's where 80/90% of the end-user response time is spent."" Steve Souders High Performance Web Sites
  • 45. 45 Ambiente e Infraestrutura WEB 08/04/20 Tunning vs Velocidade principal.jpg = 245KB www.utfpr.edu.br -> 580.5KB 1 requisições/seg.: 1 Segundo : 580 KB 1 Minuto : 33 MB 1 Hora : 1.9 GB 1 Dia : 47 GB 1 Mês : 1.4 TB 1 Ano : 17 TB Tempo Carregamento : 1,54 s Tempo Carregamento principal.jpg : 1,16s
  • 46. 46 Ambiente e Infraestrutura WEB 08/04/20 Tunning vs Velocidade principal.jpg = 45KB www.utfpr.edu.br -> 380.5KB 1 requisições/seg.: 1 Segundo : 380 KB 1 Minuto : 22 MB 1 Hora : 1.3 GB 1 Dia : 31 GB 1 Mês : 950 GB 1 Ano : 11 TB Previsto Tempo Carregamento : 1,14 s Tempo Carregamento principal.jpg : 400 ms
  • 47. 47 Ambiente e Infraestrutura WEB 08/04/20 Servidores WEB Um software responsável por aceitar pedidos HTTP de clientes, e servi-los com as respectivas respostas, incluindo opcionalmente dados, que geralmente são páginas web, tais como documentos (html, php, etc) com objetos embutidos (imagens, etc.). Timothy John Berners-Lee
  • 48. 48 Ambiente e Infraestrutura WEB 08/04/20 Servidores WEB X
  • 49. 49 Ambiente e Infraestrutura WEB 08/04/20 E agora, LAMP ou LNMP?
  • 50. 50 Ambiente e Infraestrutura WEB 08/04/20 Servidores WEB
  • 51. 51 Ambiente e Infraestrutura WEB 08/04/20 Servidores WEB Apache Criado em 1995 é Responsável por 58% dos sites ativos no mundo (aprox. 102 Milhões). Implementa 100% do padrão HTTP/1.1; Disponível para diversos SO's, além do GNU/Linux o para qual foi criado inicialmente.
  • 52. 52 Ambiente e Infraestrutura WEB 08/04/20 Servidores WEB Apache Suporte ao protocolo HTTPS; Facilmente extensível (PHP, JSP, Perl, Python etc.) por meio de módulos extras; Suporte a VirtualHosts, possibilitando a hospedagem várias páginas no mesmo servidor.
  • 53. 53 Ambiente e Infraestrutura WEB 08/04/20 Servidores WEB NGINX* Criado em 2005, encontrava-se presente em 3% de sites ativos em 2008. Ultrapassou o IIS em 2012 ficando em 2º lugar no ranking, com 12.18% de sites ativos. Hoje é responsável por aproximadamente 22 Milhões de sites ativos em 3º lugar. * pronuncia-se Engine-X
  • 54. 54 Ambiente e Infraestrutura WEB 08/04/20 Servidores WEB Varnish Varnish Cache é um acelerador de aplicação web também conhecido como cache HTTP e proxy reverso. Ele deve ser instalado atuar antes do seu servidor web principal pois irá armazenar em cache o conteúdo de todas as chamadas. Ele normalmente acelera entre 300 a 1000x dependendo de sua arquitetura.
  • 55. 55 Ambiente e Infraestrutura WEB 08/04/20 Vamos praticar...
  • 56. 56 Ambiente e Infraestrutura WEB 08/04/20 Prática 1 (requisitos) ➢ VirtualBox + Extension Pack ➢ ISO do Ubuntu 14.04 Network Install ➢ Putty
  • 57. 57 Ambiente e Infraestrutura WEB 08/04/20 Prática 1 (VBOX install) ✔ Escolha a plataforma ● i386 ou AMD64 ✔ Instale o Extension Pack para dar suporte ao hardware do hospedeiro (opcional). ✔ Crie a definição da máquina para o servidor web.
  • 58. 58 Ambiente e Infraestrutura WEB 08/04/20 Prática 1 (VBOX install) ✔ webserver1 ● Plataforma : amd64 ● Tipo : Ubuntu GNU/Linux ● Memória : 1024 MB ● Disco : 40 GB (dinamicamente expansível) ● Chipset : PIIX3 ● Disp. Apontador : PS/2 ● Virt. de Hardware : VT-x/AMD-V e Paginação aninhada
  • 59. 59 Ambiente e Infraestrutura WEB 08/04/20 Prática 1 (VBOX install) Se ao clonar ou copiar uma vm obtiver mensagens de erro de uuid de disco, utilize o comando abaixo para a correção: $ VBoxManage internalcommands sethduuid nome_da_vm.vdi → Vdisc
  • 60. 60 Ambiente e Infraestrutura WEB 08/04/20 Prática 1 (servidor web) webserver1 ~ 20 ● IP : 172.17.171.1 ~ 20 ● Rede : 172.17.171.0 ● Máscara : 255.255.0.0 ● Broadcast : 172.17.255.255 ● Gateway : 172.17.250.1 ● DNS's : 172.17.250.2 8.8.8.8 ● Host : webserver? ● Usuários : root, administrador ● Senhas : 111111
  • 61. 61 Ambiente e Infraestrutura WEB 08/04/20 O básico do VI / VIM  Habilitar o modo de edição ✔ Insert ou i : Edição ✔ Insert 2x : Substituição  Atalhos ✔ :w = Salva ✔ :x / :wq = Salva e sai ✔ :q! = Sai em modo forçado em salvar
  • 62. 62 Ambiente e Infraestrutura WEB 08/04/20 O básico do VI / VIM Edição ● / [texto] = Buscar ● u = Desfazer ● x = Apagar a direita do cursor ● d+X+↓↑ = Apagar X linhas abaixo/acima ● dd = Apagar linha ● yy = Copiar linha ● y+X+↓↑ = Copiar X linhas -1 acima/abaixo ● p = Colar
  • 63. 63 Ambiente e Infraestrutura WEB 08/04/20 O básico do VI / VIM Dicas ● :set number = Habilitar a numeração de linha ● :s/A/B = Substituir A por B
  • 64. 64 Ambiente e Infraestrutura WEB 08/04/20 Prática 1 (servidor web) Instalação e ajustes...
  • 65. 65 Ambiente e Infraestrutura WEB 08/04/20 O básico do apt-get Para atualizar a lista local de pacotes:  apt-get update Para instalar as atualizações disponíveis:  apt-get upgrade Para instalar um pacote:  apt-get install [nome_do_pacote] Para remover um pacote:  apt-get remove [nome_do_pacote] Para remover completamente um pacote:  apt-get --purge remove [nome_do_pacote] Buscar um pacote pelo nome ou descrição:  apt-cache search [nome/descrição]
  • 66. 66 # apt-get update && apt-get -V upgrade # updatedb # apt-get install vim # vi /etc/vim/vimrc ... syntax on ... # vi ~/.bashrc ... export LS_OPTIONS='--color=auto' eval “'dircolors'” ... Ambiente e Infraestrutura WEB 08/04/20 Prática 1 (vim)
  • 67. 67 # vi /etc/network/interfaces auto lo iface lo inet loopback auto eth0 allow-hotplug eth0 iface eth0 inet static address 172.17.171.1 netmask 255.255.255.0 network 172.17.171.0 broadcast 172.17.171.255 gateway 172.17.250.1 dns-nameservers 172.17.250.2 8.8.8.8 dns-search espwebux.lan # ifdown eth0 ; /etc/init.d/networking stop # service networking start ; ifup eth0 Ambiente e Infraestrutura WEB 08/04/20 Prática 1 (rede)
  • 68. 68 # vi /etc/resolv.conf ... nameserver 172.17.250.2 nameserver 8.8.8.8 ... # vi /etc/hosts ... 127.0.0.1 localhost 127.0.1.1 webserver1 ... Ambiente e Infraestrutura WEB 08/04/20 Prática 1 (dns / hosts) 127.0.0.1 é loopback para o ip real do host, já o 127.0.1.1 é um ip adicional para o mesmo host ( Debian: Chapter 5), basicamente para chamadas recusadas para loopback. Caso não tenha setado o dns em /etc/network/interfaces, pode-se fixar em /etc/resolv.conf.
  • 69. 69 # dpkg-reconfigure tzdata # apt-get install ntpdate # cd /etc/cron.hourly # vi ntp #!/bin/sh ntpdate pool.ntp.br exit 0 # chmod +x ntp # service cron restart OU # /etc/init.d/cron restart Ambiente e Infraestrutura WEB 08/04/20 Prática 1 (ntp)
  • 70. 70 Ambiente e Infraestrutura WEB 08/04/20 Prática 1 (ntp: horário de verão) Como não há um padrão para a vigência do horário de verão no Brasil (depende de decretos), a cada ano um novo período é “estabelecido” mas pode sofrer alterações de última hora, além de possuirmos quatro fusos distintos (UTC -5, -4, -3 e -2 conforme site do Observatório Nacional), devemos ajustar manualmente. Estas mudanças podem gerar danos financeiros e técnicos vindo comprometer seu servidor e serviços de rede.
  • 71. 71 Ambiente e Infraestrutura WEB 08/04/20 Prática 1 (ntp: horário de verão) Para o Paraná o Time Zone correto é o UTC -2, porém o geral para o Brasil é o -3.
  • 72. 72 Ambiente e Infraestrutura WEB 08/04/20 Prática 1 (ntp: horário de verão) # cd /usr/share/zoneinfo/posix/Brasil # mv East East.ori # rm ../../Brazil/East # vi verao_2014-16.zic Rule Brazil 2014 only - Oct 19 00:00 1 S Rule Brazil 2015 only - Feb 22 00:00 0 - Rule Brazil 2015 only - Oct 18 00:00 1 S Rule Brazil 2016 only - Feb 21 00:00 0 - #Zone NAME GMTOFF RULES/SAVE FORMAT[UNTIL] Zone Brazil/East -3:00 Brazil BR%sT # zic verao_2014-16.zic # cd ../../Brazil/ # rm East # ln -s ../posix/Brasil/East ./ # mv /etc/localtime /etc/localtime.ori # cp East /etc/localtime # ntpdate pool.ntp.br # date A regra diz que o início é no 3o domingo de outubro (19/10/14) e o final no 3o domingo de fevereiro (15/02/15), porém a data final ficou para o dia 22 contradizendo a regra.
  • 73. 73 # apt-get install ssh # vi /etc/ssh/sshd_config Port ???? PermitRootLogin no PermitEmptyPassword no PasswordAuthentication yes # cd /etc # mv securetty securetty.ori # touch securetty # /etc/init.d/ssh restart Ambiente e Infraestrutura WEB 08/04/20 Prática 1 (ssh / securetty)
  • 74. 74 Ambiente e Infraestrutura WEB 08/04/20 Prática 1 (putty)
  • 75. 75 Ambiente e Infraestrutura WEB 08/04/20 Apache (Prefork vs Worker vs Event) Prefork: PHP como módulo do apache. Cada requisição HTTP é atendida por um processo individual criado a partir de um fork. Worker: PHP através de CGI. No modo worker, os processos-filhos têm capacidade de lançar vários threads que ouvem por requisições. Event: PHP-FPM (FastCGI Process Manager). É uma variante do worker, elaborada para permitir mais requisições simultâneas utilizando intensamente os threads.
  • 76. 76 Ambiente e Infraestrutura WEB 08/04/20 Apache (Prefork vs Worker vs Event) Por padrão o Apache utiliza o MPM Prefork para sistemas monoprocessados e o MPM Worker para sistemas multiprocessados. ✔ Cada request é tratado por um processo separado (não trava o pai). ✔ Pode ser utilizado com módulos não thread- safe. ✔ Maior consumo de memória. ✔ Mais estável. ✔ Indicado p/ + de 3 mil req. simultâneas. ✔ Problemas na thread podem travar o pai. ✔ Problemas c/ módulos não thread-safe. ✔ Maior velocidade de resposta. ✔ Menor consumo de memória. ✔ Requer menos hardware. ✔ Difícil de debugar. ✔ Menos estável.
  • 77. 77 Ambiente e Infraestrutura WEB 08/04/20 E agora, Prefork, Worker ou Event?
  • 78. 78 Ambiente e Infraestrutura WEB 08/04/20 Apache (Qual MPM escolher?) 1) O núcleo do sistema operacional suporta threads? 2) O núcleo do sistema operacional suporta threads seguros (thread-safe polling)? 3) Sua aplicação está madura o suficiente para trabalhar com threads? Se a resposta é sim para todas as perguntas, seu MPM deve ser o event. Se a resposta é sim para a primeira pergunta, seu MPM deve ser o worker. Se a resposta é não para qualquer uma das perguntas, seu MPM deve ser o prefork.
  • 79. 79 Ambiente e Infraestrutura WEB 08/04/20 Dicas de segurança UTILIZE SENHAS DIFÍCEIS DE SEREM DESCOBERTAS E FÁCEIS DE SEREM LEMBRADAS POR VOCÊ NÃO DEIXE TUDO NA MESMA MÁQUINA MANTENHA O SERVIDOR ATUALIZADO apt-get update apt-get upgrade SE POSSÍVEL UTILIZE FIREWALL's CRIE UMA DMZ E COLOQUE SEU WEBSERVER NELA DEIXE SOMENTE OS SOFTWARES NECESSÁRIOS
  • 80. 80 Ambiente e Infraestrutura WEB 08/04/20 Apache Prefork
  • 81. 81 Ambiente e Infraestrutura WEB 08/04/20 Apache (Prefork) O método prefork é mantido para fins de compatibilidade com antigos sistemas que não podem suportar o uso de threads, para servidores que atendem poucas requisições ou possuem um processador legado de núcleo único. Entretanto, mesmo hoje prefork é conhecido pela estabilidade de seu código, desenvolvido ao longo de anos, e ainda é o modo preferido por muitos administradores. Alberto Federman Neto http://www.vivaolinux.com.br/artigo/Apache-24-Modulos-de-Multiprocessamento-MPM
  • 82. 82 Ambiente e Infraestrutura WEB 08/04/20 Apache (Prefork) Lembre-se que para um servidor web com Apache responder carga a qual foi planejada, o GNU/Linux deve ter parâmetros de kernel devidamente ajustados como:  Limpeza de cache de memória  Ajustes nos segmentos de memória compartilhada  Coleta de lixo  Memória virtual  Paginação  Semaphore http://kernel-handbook.alioth.debian.org/
  • 83. 83 Ambiente e Infraestrutura WEB 08/04/20 Tunando o SO # su – www-data -c 'ulimit -aHS' -s '/bin/bash' core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 9433 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 9433 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited ● Exibindo os limites máximos do www-data
  • 84. 84 Ambiente e Infraestrutura WEB 08/04/20 Tunando o SO # ps aux | grep apache Root 2083 0.0 0.8 37204 10016 ? Ss 17:38 0:00 /usr/sbin/apache2 -k start www-data 2088 0.0 0.2 24700 2880 ? S 17:38 0:00 /usr/sbin/apache2 -k start # cat /proc/2083/limits Limit Soft Limit Hard Limit Units Max cpu time unlimited unlimited seconds Max file size unlimited unlimited bytes Max data size unlimited unlimited bytes Max stack size 8388608 unlimited bytes Max core file size 0 unlimited bytes Max resident set unlimited unlimited bytes Max processes 9433 9433 processes Max open files 8192 8192 files Max locked memory 65536 65536 bytes Max address space unlimited unlimited bytes Max file locks unlimited unlimited locks Max pending signals 9433 9433 signals Max msgqueue size 819200 819200 bytes Max nice priority 0 0 Max realtime priority 0 0 Max realtime timeout unlimited unlimited us ● Exibindo os limites de determinado processo
  • 85. 85 Ambiente e Infraestrutura WEB 08/04/20 Tunando o SO # ulimit -Sn ; ulimit -Hn # ulimit -n 80000 ; ulimit -n # sysctl fs.file-max fs.file-max=500000 fs.file-max = 120719 fs.file-max = 500000 # vi /etc/sysctl.conf ... fs.file-max = 500000 ... # vi /etc/security/limits.conf ... * soft nproc 500000 * hard nproc 500000 * soft nofile 500000 * hard nofile 500000 Existem duas maneiras de alterar os limites. Utilizando o comando ulimit ou o sysctl (visualiza ou altera parâmetros do kernel em /proc/ sys/)
  • 86. 86 Ambiente e Infraestrutura WEB 08/04/20 Apache (Cálculo de memória) # ps -ylC apache2 –sort:rss S 33 17530 16102 0 78 0 6008 5038 341548 ? 00:00:00 apache2 S 33 17491 16102 0 75 0 6036 5036 354540 ? 00:00:00 apache2 S 33 17529 16102 0 75 0 6036 5038 357283 ? 00:00:00 apache2 S 33 17472 16102 0 75 0 6044 5038 359161 ? 00:00:00 apache2 S 33 17438 16102 0 75 0 6056 5036 351130 ? 00:00:00 apache2 # top 25255 nobody 15 0 8992 4796 2088 S 0.7 0.1 0:01.10 apache2 25330 nobody 15 0 9112 5040 2304 S 0.7 0.1 0:01.02 apache2 25369 nobody 15 0 8824 4608 2084 S 0.7 0.1 0:01.07 apache2 25372 nobody 15 0 9088 4792 2084 S 0.7 0.1 0:00.92 apache2 25399 nobody 15 0 8928 4876 2296 S 0.7 0.1 0:00.81 apache2 Quantidade de memória gasta por processo (KB) Memória virtual Memória residente Memória compartilhada
  • 87. 87 Ambiente e Infraestrutura WEB 08/04/20 Apache (Cálculo de memória) Como calcular o valor correto para os parâmetros MaxClients e ServerLimit? Ao utilizar o comando free na máquina virtual criada (com 1024 MB de ram) obtemos o resultado abaixo: Dividindo a média de memória aproximada para cada conexão (6 MB) pela memória total disponível (1080 MB) conclui-se que o máximo de conexões é de 180. Total used free Mem: 1217464 473960 743504 -/+ buffers/cache: 136596 1080868 Swap: 1748988 0 1748988
  • 88. 88 # apt-get install apache2-mpm-prefork php5 openssl libapache2-mod-php5 ca-certificates # vi /etc/apache2/apache2.conf ... ServerName webserver1? ... # apt-get install php5-mysql OU # apt-get install php5-pgsql Ambiente e Infraestrutura WEB 08/04/20 Apache (Prefork: instalação) Para retirar a mensagem “Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName”
  • 89. 89 Ambiente e Infraestrutura WEB 08/04/20 Apache (Prefork: configuração) # vi /etc/apache2/mods-available/mpm_prefork.conf <IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 150 MaxRequestsPerChild 5 </IfModule>
  • 90. 90 Ambiente e Infraestrutura WEB 08/04/20 Apache+PHP (Segurança básica) # vi /etc/apache2/conf-available/security.conf ... ServerTokens Prod ServerSignature Off TraceEnabler Off ... # vi /etc/php5/apache2/php.ini expose_php Off Dicas  Páginas de erro /etc/apache2/conf.d/localized-error-pages  Fail2Ban  SELinux  Apparmor
  • 91. 91 # vi /etc/apache2/sites-available/espwebux2015.conf <VirtualHost *:80> ServerAdmin webmaster@localhost ServerName espwebux2015.com ServerAlias www.espwebux2015.com espwebux2015.com DocumentRoot /var/www/espwebux2015 <Directory /var/www/espwebux2015/> Options Indexes DirectoryIndex index.html index.php AllowOverride None Order allow,deny Allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/error_espwebux2015.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/access_espwebux2015.log vhost_combined </VirtualHost> Ambiente e Infraestrutura WEB 08/04/20 Apache (Prefork: Virtual Host)
  • 92. 92 # mkdir /var/www/espwebux2015 # chown -R www-data:www-data /var/www/espwebux2015 # chmod -R 755 /var/www/espwebux2015 # service apache2 restart # a2ensite espwebux2015 # a2dissite 000-default # ls -la /etc/apache2/sites-enabled Ambiente e Infraestrutura WEB 08/04/20 Apache (Prefork: Virtual Host)
  • 93. 93 # mkdir /etc/apache2/cert ; cd /etc/apache2/cert # openssl genrsa -des3 -out espwebux2015_cert.key 2048 # openssl rsa -in espwebux2015_cert.key -out espwebux2015_cert_nopwd.key # chmod 600 espwebux2015_cert_nopwd.key # openssl req -new -key espwebux2015_cert.key -out espwebux2015_cert.csr # openssl x509 -req -days 365 -in espwebux2015_cert.csr -signkey espwebux2015_cert.key -out espwebux2015_cert.crt Ambiente e Infraestrutura WEB 08/04/20 Apache (Prefork: Certificado) Gerar a chave privada (Private Key) Remove a senha da chave privada Gerar o pedido de certificação (Certificate Signing Request). Country: BR, State: Parana, Locality: Londrina, Org./OU: UTFPRLD, Common Name: espwebux2015.com, Email: email@admin.com. Assinar o certificado (Self-Signed Certificate):
  • 94. 94 # vi /etc/apache2/sites-available/espwebux2015.conf … SSLEngine on SSLCertificateFile /etc/apache2/cert/nome_cert.crt SSLCertificateKeyFile /etc/apache2/cert/nome_cert_nopwd.key ... # a2enmod ssl ; service apache2 restart Ambiente e Infraestrutura WEB 08/04/20 Apache (Prefork: Módulo SSL) Módulo SSL Adicionar os certificados ao Virtual Host, carregar o módulo ssl e reiniciar o Apache
  • 95. 95 Ambiente e Infraestrutura WEB 08/04/20 Apache Worker
  • 96. 96 # apt-get install apache2-mpm-worker php5 php5-cgi php5-cli libapache2-mod-fcgid openssl ca-certificates # vi /etc/apache2/apache2.conf ... ServerName webserver1 ... # apt-get install php5-mysql OU # apt-get install php5-pgsql # a2dismod php5; # a2enmod deflate;a2enmod rewrite;a2enmod include # a2enmod fcgid # a2ensite espwebux2015 # service apache2 restart Ambiente e Infraestrutura WEB 08/04/20 Apache (Worker: instalação) Para retirar a mensagem “Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName”
  • 97. 97 Ambiente e Infraestrutura WEB 08/04/20 Apache (Worker: configuração) # cd /etc/apache2/mods-available # cp -pa mpm_worker.conf mpm_worker.conf.ori # vi mpm_worker.conf <IfModule mpm_worker_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxRequestWorkers 150 MaxConnectionsPerChild 0 KeepAliveTimeout 5 </IfModule> Resolvido no mpm-event
  • 98. 98 # vi /etc/apache2/sites-available/espwebux2015.conf <VirtualHost *:80> ServerName espwebux2015.com ServerAlias www.espwebux2015.com espwebux2015.com ServerAdmin webmaster@localhost DocumentRoot /var/www/espwebux2015 <Directory /var/www/espwebux2015> AddHandler fcgid-script .php FCGIWrapper /usr/lib/cgi-bin/php5 .php Options ExecCGI </Directory> #Logs ErrorLog ${APACHE_LOG_DIR}/error_espwebux2015.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/access_espwebux2015.log vhost_combined </VirtualHost> Ambiente e Infraestrutura WEB 08/04/20 Apache (Worker: Virtual Host)
  • 99. 99 # mkdir /var/www/espwebux2015 # chown -R www-data:www-data /var/www/espwebux2015 # chmod -R 755 /var/www/espwebux2015 # service apache2 restart ; a2ensite espwebux2015 # a2dissite 000-default # la -la /etc/apache2/sites-enabled # la -la /etc/apache2/sites-enabled Ambiente e Infraestrutura WEB 08/04/20 Apache (Worker: Virtual Host)
  • 100. 100 Ambiente e Infraestrutura WEB 08/04/20 Apache (Worker) Os procedimentos para Certificado e SSL, são os mesmos descritos para o Prefork.
  • 101. 101 Ambiente e Infraestrutura WEB 08/04/20 Apache (Worker: suexec+fcgi) Opcional É possível criar usuários para se executar cada VirtualHost em uma instância própria via suexec isolando-se versão de php, FastCGI (inclusive cpanel) e otimizando a utilização de memória e cpu. https://www.howtoforge.com/...
  • 102. 102 # dpkg-reconfigure dash → NÃO # service apparmor stop # update-rc.d -f apparmor remove # aptitude remove apparmor apparmor-utils # vi /etc/php5/cgi/php.ini ... cgi.fix_pathinfo=1 ... # vi /etc/apache2/mods-available/fcgid.conf <IfModule mod_fcgid.c> FcgidConnectTimeout 20 PHP_Fix_Pathinfo_Enable 1 <IfModule mod_mime.c> AddHandler fcgid-script .fcgi </IfModule> </IfModule> Ambiente e Infraestrutura WEB 08/04/20 Apache (Worker: suexec+fcgi)
  • 103. 103 # groupadd espwebux2015 # useradd -s /bin/false -d /var/www/espwebux2015 -m -g espwebux2015 # mkdir -p /var/www/espwebux2015/scripts # chown -R espwebux2015:espwebux2015 /var/www/espwebux2015/ # chmod -R 755 /var/www/espwebux2015/ # service apache2 restart # su – espwebux2015 -c /usr/lib/apache2/suexec -V Ambiente e Infraestrutura WEB 08/04/20 Apache (Worker: suexec+fcgi)
  • 104. 104 # mkdir /var/www/espwebux2015/scripts # chown espwebux2015:espwebux2015 /var/www/espwebux2015/scripts # chmod -R 755 /var/www/espwebux2015/scripts # vi /var/www/espwebux2015/scripts/php-fcgi-starter #!/bin/sh PHPRC=/etc/php5/cgi export PHPRC export PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_CHILDREN=8 exec /usr/bin/php-cgi # apt-get install apache2-suexec # a2dismod php5; # a2enmod suexec ; a2enmod fcgid # a2enmod deflate ; a2enmod rewrite ; a2enmod include # a2ensite espwebux2015 # service apache2 restart Ambiente e Infraestrutura WEB 08/04/20 Apache (Worker: suexec+fcgi)
  • 105. 105 # vi /etc/apache2/sites-available/espwebux2015.conf <VirtualHost *:80> SuexecUserGroup espwebux2015 espwebux2015 ServerName espwebux2015.com ServerAlias www.espwebux2015.com espwebux2015.com ServerAdmin webmaster@localhost DocumentRoot /var/www/espwebux2015 <Directory /var/www/espwebux2015> Options +ExecCGI AllowOverride All AddHandler fcgid-script .php FCGIWrapper /var/www/espwebux2015/scripts/php-fcgi- starter .php Order allow,deny Allow from all </Directory> ServerSignature Off </VirtualHost> Ambiente e Infraestrutura WEB 08/04/20 Apache (Worker: suexec+fcgi)
  • 106. 106 Ambiente e Infraestrutura WEB 08/04/20 Apache Event
  • 107. 107 # apt-get install libapache2-mod-fastcgi php5-fpm apache2-mpm-event # vi /etc/apache2/conf-available/php5-fpm.conf <IfModule mod_fastcgi.c> AddHandler php5-fcgi .php Action php5-fcgi /php5-fcgi Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi - socket /var/run/php5-fpm.sock -pass-header Authorization <Directory /usr/lib/cgi-bin> Require all granted </Directory> </IfModule> # apt-get install php5-mysql OU # apt-get install php5-pgsql Ambiente e Infraestrutura WEB 08/04/20 Apache (Event: instalação)
  • 108. 108 # vi /etc/apache2/mods-enabled/mpm_event.conf <IfModule mpm_event_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxRequestWorkers 150 MaxConnectionsPerChild 0 </IfModule> Ambiente e Infraestrutura WEB 08/04/20 Apache (Event: configuração)
  • 109. 109 # a2enmod actions fastcgi alias # a2dismod mpm_prefork php5 # a2enconf php5-fpm # a2enmod mpm_event # service apache2 restart Ambiente e Infraestrutura WEB 08/04/20 Apache (Event: instalação) Descarga de módulos antigos, carga de novas configurações e módulos.
  • 110. 110 Ambiente e Infraestrutura WEB 08/04/20 Apache (Event: configuração) # vi /etc/apache2/apache2.conf #Worker MPM <IfModule worker.c> StartServers 10 MinSpareServers 10 MaxSpareServers 25 ServerLimit 180 MaxClients 180 MaxRequestsPerChild 200 MaxKeepAliveRequests 500 KeepAliveTimeout 5 </IfModule> Resolvido no mpm-event
  • 111. 111 Ambiente e Infraestrutura WEB 08/04/20 Apache (Event) Os procedimentos para Virtual Host, Certificado e SSL, são os mesmos descritos para o Prefork.
  • 112. 112 Ambiente e Infraestrutura WEB 08/04/20 Comandos úteis
  • 113. 113 Ambiente e Infraestrutura WEB 08/04/20 Apache (Comandos úteis) ● a2enmod: habilita um módulo (se disponível em /etc/apache2/mods-available) ● a2dismod: desabilita um módulo ativo (se presente em '/etc/apache2/mods-enabled') ● a2ensite: habilita um site (se configurado em /etc/apache2/sites-available) ● a2dissite: desabilita um site (se linkado em ● /etc/apache2/sites-enabled) ● apache2ctl -v ou curl -I localhost: informações
  • 114. 114 Ambiente e Infraestrutura WEB 08/04/20 Apache (Comandos úteis) # command type -f 'service' &>'/dev/null' && command service 'apache2' 'force-reload' # command type -f 'service' &>'/dev/null' || /etc/init.d/apache2 'force-reload' # command type -f 'newaliases' &>'/dev/null' && command newaliases # command apache2ctl -t # command type -f 'service' &>'/dev/null' && command service 'apache2' 'reload' # command type -f 'service' &>'/dev/null' || /etc/init.d/apache2 'reload' Relê as novas configurações sem para o serviço. Testa a sintax nos arquivos de configuração. Relê novos aliases criados. Relê as novas configurações.
  • 115. 115 Ambiente e Infraestrutura WEB 08/04/20 Apache (Comandos úteis) # command type -f 'service' &>'/dev/null' && command service 'apache2' 'force-reload' # command type -f 'service' &>'/dev/null' || /etc/init.d/apache2 'force-reload' # command type -f 'service' &>'/dev/null' && command service 'apache2' 'restart' # command type -f 'service' &>'/dev/null' || /etc/init.d/apache2 'restart' # command apache2ctl -t -D DUMP_MODULES Relê as novas configurações sem fechar as conexões do clientes. Relê as novas configurações e fecha as conexões dos clientes. Lista os móulos carregados.
  • 117. 117 Ambiente e Infraestrutura WEB 08/04/20 NGINX: proposta principal Varnish NGINX Apache MySQLPHP Estático Dinâm ico
  • 118. 118 Ambiente e Infraestrutura WEB 08/04/20 NGINX: propostas alternativas NGINX Apache MySQLPHP Dinâm ico NGINX MySQLPHP DinâmicoVarnish Estático Apache JBOSS WebSphere
  • 119. 119 Ambiente e Infraestrutura WEB 08/04/20 NGINX: estratégias Server 1 Server 3 Server 2 Varnish NGINX Apache MySQLPHP Estático Dinâm ico Server 4 Varnish NGINX Apache MySQLPHP Estático Dinâm ico Server 1 Server 3 Server 2 Varnish NGINX Apache MySQL PHP Estático Server 4 Apache Apache Dinâmico Dinâmico Dinâmico Server 5 Server 6 Server EUA Server 3 Server 2 Varnish NGINX Apache MySQL PHP Estático Server 4 Apache Apache Dinâmico Dinâmico Dinâmico Server 5 Server 6 Varnish Estático Server Brasil
  • 120. 120 Ambiente e Infraestrutura WEB 08/04/20 NGINX Nginx é um servidor web de código aberto escrito para resolver alguns dos problemas de desempenho e escalabilidade associados ao Apache. Nginx diz que seu servidor web foi escrito para resolver o problema C10K, que é uma referência a um artigo escrito por Daniel Kegel sobre como obter um servidor web para lidar com 10.000 conexões, dadas as limitações dos sistemas operacionais. Em seu artigo, ele citou um paper de Dean Gaudet, que diz: “Why don't you guys use a select/event based model like Zeus? It's clearly the fastest”.
  • 121. 121 Ambiente e Infraestrutura WEB 08/04/20 NGINX Nginx é composto por módulos que estão incluídos em tempo de compilação. Isso significa que o usuário faz o download do código-fonte e seleciona quais módulos vai compilar. Existem módulos de conexão para fazer servidores de aplicação, proxy e balanceamento de carga entre outros. Não há nenhum módulo de PHP pois o Nginx pode compilar o código PHP sozinho.
  • 122. 122 Ambiente e Infraestrutura WEB 08/04/20 NGINX (Diagrama de arquitetura) Neste diagrama vemos que Nginx, neste caso, está usando o processo FastCGI para executar Python, Ruby, ou outro código além de gerenciar o armazenamento de objetos em cache (loader/ manager)
  • 123. 123 Ambiente e Infraestrutura WEB 08/04/20 NGINX (Instalação) # apt-cache show nginx # vi /etc/apt/sources.list ... ### DotDeb ### deb http://packages.dotdeb.org stable all deb-src http://packages.dotdeb.org stable all # mkdir ~/Downloads ; cd ~/Downloads # wget http://www.dotdeb.org/dotdeb.gpg # cat dotdeb.gpg | apt-key add - # apt-get update # apt-get install nginx php5-fpm php-pear # cd /etc/nginx # cp -pa nginx.conf nginx.conf.ori # apt-cache show nginx | grep Version Será exibido o pacote do repositório “oficial” em uma versão mais antiga. Se quiser utilizar versões mais novas, adicione o repositório da DotDeb. Observe que a versão disponível no repositório da DotDeb é mais nova.
  • 124. 124 Ambiente e Infraestrutura WEB 08/04/20 NGINX (Ajustes) # vi /etc/nginx/nginx.conf user www-data; worker_process 4; #worker_cpu_affinity 0001 0010 0100 1000; worker_priority -5; events { #use epoll; worker_connections 256; #multi_accept on; } ... (continua no próximo slide) Conforme quantidade de Cores de CPU's. Variar entre -4 e 0 (-20 maior ~ 19 menor) Valor de memória utilizado (monitorar e ajustar). Seleciona o modelo de fila de atendimento de requisições. Valores: select, poll, kqueue, epoll, rtsig, /dev/poll e eventport Desativar na VM.
  • 125. 125 Ambiente e Infraestrutura WEB 08/04/20 NGINX (Ajustes) http { ... open_file_cache max=1000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on; ... keepalive_timeout 30; reset_timedout_connection on; client_body_timeout 10; send_timeout 2; ... } http://nginx.org/en/docs/http/ngx_http_core_module.html
  • 126. 126 Ambiente e Infraestrutura WEB 08/04/20 NGINX (Criar site) # cd /etc/nginx/sites-available/ # cp -pa default espwebux2015 # vi espwebux2015 server { Listen 8181; server_name espwebux2015.com; root /var/www/espwebux2015; index index.html index.php; ... # setup logging access_log /var/log/nginx/access_espwebux2015.log; error_log /var/log/nginx/error_espwebux2015.log; } ... # cd ../sites-enabled # rm default # ln -s ../sites-available/espwebux2015 Ativar o site.
  • 127. 127 Ambiente e Infraestrutura WEB 08/04/20 NGINX (Criar site) # vi /etc/nginx/sites-available/default ... Listen 8181; ... # vi /etc/nginx/sites-available/espwebux2015 ... server { ... location ~ .php$ { try_files $uri /index.php =404; fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } ... Configurar o PHP.
  • 128. 128 Ambiente e Infraestrutura WEB 08/04/20 NGINX (Criar site) # vi /var/www/espwebux2015/info.php <?php phpinfo(); ?> # chown www-data:www-data –R /var/www # chmod 644 –R /var/www # /etc/init.d/nginx restart # /etc/init.d/php5-fpm restart Criar o arquivo PHP.
  • 129. 129 # mkdir /etc/nginx/cert # cd /etc/ngins/cert # openssl genrsa -des3 -out espwebux2015_nginx_cert.key 2048 # openssl rsa -in espwebux2015_nginx_cert.key -out espwebux2015_nginx_cert_nopwd.key # chmod 600 espwebux2015_nginx_cert_nopwd.key # openssl req -new -key espwebux2015_nginx_cert.key -out espwebux2015_nginx_cert.csr # openssl x509 -req -days 365 -in espwebux2015_nginx_cert.csr -signkey espwebux2015_nginx_cert.key -out espwebux2015_nginx_cert.crt Ambiente e Infraestrutura WEB 08/04/20 NGINX (Certificado) Gerar a chave privada (Private Key) Remove a senha da chave privada Gerar o pedido de certificação (Certificate Signing Request). OBS: O Common Name solicitado deverá ter o mesmo nome do servidor (ex: host.dominio.com.br) Assinar o certificado (Self-Signed Certificate):
  • 130. 130 Ambiente e Infraestrutura WEB 08/04/20 NGINX (SSL: append ao arq. do site) server { listen 8181; server_name espwebux2015.com; root /var/www/espwebux2015; index index.php; # setup logging access_log /var/log/nginx/access_espwebux2015_ssl.log; error_log /var/log/nginx/error_espwebux2015_ssl.log; location ~ .php$ { fastcgi_pass   127.0.0.1:9000; fastcgi_index  index.php; include fastcgi_params; } # SSL ssl on; ssl_certificate /etc/nginx/cert/espwebux2015.crt; ou .pem ssl_certificate_key /etc/nginx/cert/espwebux2015_nopwd.key; }
  • 131. 131 Ambiente e Infraestrutura WEB 08/04/20 NGINX (Ativar e reiniciar) # cd /etc/nginx/sites-enabled/ # ln -s ../sites-available/espwebux2015 # /etc/init.d/nginx restart # /etc/init.d/php5-fpm restart
  • 132. 132 Ambiente e Infraestrutura WEB 08/04/20 +
  • 133. 133 Ambiente e Infraestrutura WEB 08/04/20 NGINX (Modificações: Apache) # cp -pa /var/www/espwebux2015 /var/www/espwebux2015.apache # cd /var/www/espwebux2015.apache # rm -rf scripts index.html # cd ../espwebux2015 ; rm phpinfo.php # vi index.html # vi /etc/apache2/ports.conf NameVirtualHost *:8080 Listen 8080 # vi /etc/apache2/sites-enabled/espwebux2015 <VirtualHost *:8080> ... DocumentRoot /var/www/espwebux2015.apache <Directory /var/www/espwebux2015.apache/> ... Realizar as instalações do NGINX e Apache2-mpm-prefork /worker normalmente (Mesma máquina). Renomear a pasta padrão do apache. Alterar a porta de escuta. Alterar o arquivo do site. Remover a chamada ao phpinfo.php
  • 134. 134 Ambiente e Infraestrutura WEB 08/04/20 NGINX (Modificações: NGINX) # vi /etc/nginx/sites-enabled/espwebux2015 location ~ .php$ { ... proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_pass http://127.0.0.1:8080; ... } Redirecionamento para o Apache.
  • 135. 135 Ambiente e Infraestrutura WEB 08/04/20 NGINX (balanceamento de carga) Opcional É possível utilizar a ideia de um pool de servidores apache para a balanceamento de carga. NGINX DinâmicoVarnish Estático Apache Apache Apache Dinâm ico Dinâm ico
  • 136. 136 Ambiente e Infraestrutura WEB 08/04/20 NGINX (Modificações: NGINX) # vi /etc/nginx/sites-enabled/espwebux2015 location ~ .php$ { ... proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_pass http://apaches; ... } # Pool upstream apaches { server ipdoserver1:8081; server ipdoserver2:8082; server ipdoserver3:8083; } Fora da TagServer Realizar as instalações do NGINX e Apache2-mpm-prefork normalmente (Máquinas separadas).
  • 137. 137 Ambiente e Infraestrutura WEB 08/04/20 + +
  • 138. 138 Ambiente e Infraestrutura WEB 08/04/20 NGINX + VARNISH + Apache # vi /etc/nginx/sites-enabled/espwebux2015 listen 8181; ... # apt-get install varnish # apt-get install libapache2-mod-rpaf # cd /etc/varnish # cp -pa default.vcl default.vcl.ori # vi /etc/varnish/default.vcl backend default { .host = “127.0.0.1”; .port = “8181”; } Alterar a porta do NGINX de 80 para 8181. Instalar o Varnish. Alterar o trecho abaixo no default.vcl com segue no exemplo: backend default { .host = “127.0.0.1”; .port = “8080”;}
  • 139. 139 Ambiente e Infraestrutura WEB 08/04/20 NGINX + VARNISH + Apache # vi /etc/default/varnish ... START=yes ... ### ALTERNATIVE 2 ### DAEMON_OPTS=“-a :6081 -T localhost: 6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s file,/var/lib/varnish/$INSTANCE/varnish_storage.bin,1G” ...
  • 140. 140 Ambiente e Infraestrutura WEB 08/04/20 NGINX + VARNISH + Apache ... ### ALTERNATIVE 3 ### VARNISH_VCL_CONF=/etc/varnish/default.vcl VARNISH_LISTEN_PORT=80 VARNISH_MIN_THREADS=1 VARNISH_MAX_THREADS=1000 VARNISH_THREAD_TIMEOUT=60 VARNISH_STORAGE_FILE=/var/lib/varnish/$INSTANCE/ varnish_storage.bin VARNISH_STORAGE_SIZE=2G VARNISH_SECRET_FILE=/etc/varnish/secret VARNISH_STORAGE=“file,${VARNISH_STORAGE_FILE},$ {VARNISH_STORAGE_SIZE}” VARNISH_TTL=20 DAEMON_OPTS=... # /etc/init.d/varnish restart Tempo de atualização do cache. Alternative 1, 2 ou 3
  • 142. 142 Ambiente e Infraestrutura WEB 08/04/20 MySQL (Instalação) # apt-get install mysql-server # apt-get install php5-mysql # apt-get install phpmyadmin Informe uma senha para o mysql (pode ser nula). Recomenda-se que não seja a de root ou administrador. Selecionar o Servidor Web Selecionar YES para configurar o PHPMyAdmin Abrir o PHPMyAdmin no navegador http://ip_server/phpmyadmin
  • 143. 143 Ambiente e Infraestrutura WEB 08/04/20 MySQL (PHP PGAdmin) # vi /etc/php5/conf.d/suhosin.ini suhosin.sql.bailout_on_error = off suhosin.post.max_array_index_length = 256 suhosin.post.max_totalname_length = 8192 suhosin.post.max_vars = 2048 suhosin.request.max_array_index_length = 256 suhosin.request.max_totalname_length = 8192 suhosin.request.max_vars  = 2048 Otimizar configurações do PHP para o PHPPGAdmin Descomentar e Alterar os seguintes parâmetros. OBS: o Suhosin corrige diversas brechas de segurança.
  • 145. 145 Ambiente e Infraestrutura WEB 08/04/20 PostgreSQL (Instalação/Configuração) # apt-get install postgresql php5-pgsql phppgadmin # vi /etc/phppgadmin/config.inc.php  $conf['servers'][0]['host'] = 'localhost'; $conf['servers'][0]['defaultdb'] = 'postgres'; # su - postgres  $ createuser -P nome-do-usuario  $ logout # vi /etc/postgresql/X.Y/main/postgresql.conf  listen_addresses = '*'
  • 146. 146 Ambiente e Infraestrutura WEB 08/04/20 PostgreSQL (Instalação/Configuração) # vi /etc/postgresql/8.4/main/pg_hba.conf  #"local" is for Unix domain socket connections only #local all all ident sameuser  ... # IPv4 local connections: host all all 0.0.0.0/0 md5 # vi /etc/phppgadmin/apache.conf  allow from all # /etc/init.d/apache2 restart # /etc/init.d/postgresql restart Comente (#) Abrir o PHPMyAdmin no navegador http://ip_server/phppgadmin
  • 147. 147 # ps aux | fgrep -i apache # apache2 -V Ambiente e Infraestrutura WEB 08/04/20 Prática 1 (Apache: comandos úteis) Observe que na primeira linha o usuário usado para “startar” o serviço (Ss) foi root, mas as demais instâncias (S) são do próprio apache (www-data). Este relatório fornece diversas informações sobre o MPM.
  • 148. 148 Ambiente e Infraestrutura WEB 08/04/20 Benchmark
  • 149. 149 # siege http://www.espwebux2015.com -c 100 -r 100 ... HTTP/1.1 200 0.00 secs: 148 bytes ==> GET / done. Transactions: 10000 hits Availability: 100.00 % Elapsed time: 63.46 secs Data transferred: 1.41 MB Response time: 0.00 secs Transaction rate: 157.58 trans/sec Throughput: 0.02 MB/sec Concurrency: 0.54 Successful transactions: 10000 Failed transactions: 0 Longest transaction: 0.19 Shortest transaction: 0.00 FILE: /var/siege.log You can disable this annoying message by editing the .siegerc file in your home directory; change the directive 'show-logfile' to false. Ambiente e Infraestrutura WEB 08/04/20 Benchmark SIEGE (GET)
  • 150. 150 Ambiente e Infraestrutura WEB 08/04/20 Benchmark HTOP AntesDepois
  • 151. 151 Ambiente e Infraestrutura WEB 08/04/20 A importância do tunning de SO Abaixo a saída do console do terminal utilizado com o siege mostra que houve um estouro no número máximo de arquivos abertos, ou seja, foram abertos simultaneamente mais arquivos do que estava estipulado na variável open files.
  • 152. 152 # siege -b -t60S http://www.espwebux2015.com ... [error] socket: 71800576 address is unavailable.: Cannot assign requested address [error] socket: 105371392 address is unavailable.: Cannot assign requested address [error] socket: 113764096 address is unavailable.: Cannot assign requested address HTTP/1.1 200 0.01 secs: 148 bytes ==> GET / done. siege aborted due to excessive socket failure; you can change the failure threshold in $HOME/.siegerc Transactions: 30637 hits Availability: 96.73 % Elapsed time: 20.59 secs Data transferred: 4.32 MB Response time: 0.01 secs Transaction rate: 1487.96 trans/sec Throughput: 0.21 MB/sec Concurrency: 13.07 Successful transactions: 30637 Failed transactions: 1037 Longest transaction: 0.21 Shortest transaction: 0.00 FILE: /var/siege.log You can disable this annoying message by editing the .siegerc file in your home directory; change the directive 'show-logfile' to false. Ambiente e Infraestrutura WEB 08/04/20 Benchmark SIEGE (Benchmark)
  • 153. 153 # siege -c50 -d10 -t3M http://www.espwebux2015.com ... HTTP/1.1 200 0.01 secs: 148 bytes ==> GET / HTTP/1.1 200 0.01 secs: 148 bytes ==> GET / ^C Lifting the server siege... done. Transactions: 496 hits Availability: 100.00 % Elapsed time: 50.03 secs Data transferred: 0.07 MB Response time: 0.00 secs Transaction rate: 9.91 trans/sec Throughput: 0.00 MB/sec Concurrency: 0.02 Successful transactions: 496 Failed transactions: 0 Longest transaction: 0.02 Shortest transaction: 0.00 FILE: /var/siege.log You can disable this annoying message by editing the .siegerc file in your home directory; change the directive 'show-logfile' to false. Ambiente e Infraestrutura WEB 08/04/20 Benchmark SIEGE (Loading)
  • 154. 154 # ab2 -n 100 -C SESSf4cc9d1482f4b260feeb9d88f77cd643=5ed9338d0b55fe9a35c58f 8093d5e15e http://www.espwebux2015.com:80/ Ambiente e Infraestrutura WEB 08/04/20 Benchmark Apache Benchmark (exemplos) # ab2 -c 1000 -n 1000 http://www.espwebux2015.com:80/ # ab2 -n 10000 -C SESS7...9=24...1 http://www.espwebux2015.com:80/ # ab2 -k -n 50000 -c 2 -e apache.cvs http://www.espwebux2015.com:80/index.html
  • 155. 155 Ambiente e Infraestrutura WEB 08/04/20 Benchmark (Ferramentas) ● Google Web Toolkit ● Apache Jmeter ● Página com várias ferramentas listadas ● Open Web Application Security Project (OWASP) ● http://www.webpagetest.org/
  • 156. 156 Ambiente e Infraestrutura WEB 08/04/20  Criar conta;  Criar instância EC2 T2.Micro com o Ubuntu 14.04 AMD64 (utilize o ponto de presença de São Paulo preferencialmente);  Associar um Elastic IP a mesma instância;  Liberar as portas 22, 80, 443, 3306, 8181 (Nginx), 8080 (Apache http), 8081 (Apache https);  Criar e importar Key Pair para acesso ssh;  Converter via PuttyGen a chave .pem para .ppk;  Acessar via ssh e instalar conforme a proposta principal do slide 117 (Web Varnish Nginx Apache).→ → →