2. • Arquitetura Cliente / Servidor
• Protocolo TCP/IP
• Protocolo HTTP
• Servidores WEB
• Apache
• Nginx
• Varnish
• Módulos para Servidores WEB
• Banco de Dados – MySQL e PostgreSQL
• Ferramentas
• Segurança
3. “É uma arquitetura onde o processamento da informação é
dividido em módulos ou processos distintos. Um processo é
responsável pela manutenção da informação (Servidor),
enquanto que outro é responsável pela obtenção dos dados
(Cliente)”. BATTISTI, (2001, pág. 38).
“É 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).
4. Cliente:
• Inicia e termina as conversações com os Servidores;
• Não se comunica com outros Clientes;
• Normalmente responsável pela entrada e saída de dados e
comunicação com o usuário;
• Torna a rede ‘transparente’ ao usuário;
• Hardware: pode ser um micro simples;
Servidor:
• Execução contínua;
• Recebe e responde a solicitações dos Clientes;
• Pode se comunicar com outros Servidores;
• Presta serviços distribuídos;
• Atende a diversos Clientes simultaneamente;
• Exige máquinas mais robustas, com grande capacidade de
processamento;
• Software em constante execução, aguardando ser chamado pelo
Cliente.
5. Confiabilidade
Se uma máquina apresenta algum problema, ainda que seja um dos
Servidores, parte do Sistema continua ativo.
Centralização e Segurança
Dados são armazenados no servidor, que geralmente possuem
controles de segurança muito maior do que a maioria dos clientes.
O Sistema cresce facilmente
Torna-se fácil modernizar o Sistema quando necessário.
O Cliente e o Servidor podem possuir ambientes operacionais individuais e
heterogêneos
Pode-se misturar várias plataformas para melhor atender às
necessidades individuais de diversos setores e usuários.
6. Sobrecarga
Um servidor poderá ficar sobrecarregado caso receba mais solicitações
simultâneas dos clientes do que pode suportar.
O Cliente e o Servidor podem possuir ambientes operacionais individuais e
heterogêneos
Necessidade da programação se adequar aos diversos sistemas
operacionais, tanto no lado Cliente como no lado Servidor
7.
8.
9.
10. Denominado anteriormente de Internet Protocol Suite, o TCP teve
origem em maio de 1974, quando pesquisadores do IEEE
apresentaram um protocolo de compartilhamento de pacotes em
rede.
O TCP (acrônimo para o inglês Transmission Control Protocol) é
um dos protocolos sob os quais a internet é sustentada. A
versatilidade e robustez deste protocolo tornou-o adequado a
redes globais, já que este verifica se os dados são enviados de
forma correta, na sequência apropriada e sem erros, pela rede.
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
11. 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.
Confiabilidade - O TCP usa várias técnicas para proporcionar uma
entrega confiável dos pacotes de dados, que é a grande
vantagem que tem em relação ao UDP. O TCP permite a
recuperação de pacotes perdidos, a eliminação de pacotes
duplicados, a recuperação de dados corrompidos, e pode
recuperar a ligação em caso de problemas no sistema e na rede.
Full duplex - É possível a transferência simultânea em ambas
direções (cliente-servidor) durante toda a sessão.
12. 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.
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.
13. 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: O TCP é um protocolo de transporte e executa importantes
funções para garantir que os dados sejam entregues de uma
maneira confiável, ou seja, sem que os dados sejam corrompidos
ou alterados.
IP: É um protocolo de endereçamento, um protocolo de rede.
Podermos afirmar que as principais funções do protocolo IP são
endereçamento e roteamento, ou de uma maneira mais simples,
fornecer uma maneira para identificar unicamente cada máquina
da rede (endereço IP) e uma maneira de encontrar um caminho
entre a origem e o destino (Roteamento).
17. • O HTTP - HyperText Transfer Protocol / Protocolo de Transferência
de Hipertexto - é um protocolo de comunicação, mantido pelo W3C
utilizado para sistemas de informação de hipermídia distribuídos e
colaborativos. Seu uso para a obtenção de recursos interligados levou
ao estabelecimento da World Wide Web.
• Ele surgiu da necessidade de distribuir informações pela rede, e para
isso, foi necessário criar uma forma padronizada de comunicação entre
os clientes e os servidores da Web e entendida por todos os
computadores ligados à Internet.
• O HTTP é um protocolo de aplicação responsável pelo tratamento de
pedidos e respostas entre cliente e servidor na Internet. Com isso, o
protocolo HTTP passou a ser utilizado para a comunicação entre
computadores na Internet e a especificar como seriam realizadas as
transações entre clientes e servidores, através do uso de regras
básicas.
18. • HTTP utiliza o modelo cliente-servidor, baseando-se no
paradigma de requisição e resposta.
• 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 (padrão utilizado para codificar dados em
formato de textos ASCII para serem transmitidos pela Internet)
contendo os modificadores da requisição, informações sobre o
cliente e, possivelmente, o conteúdo no corpo da mensagem.
19. • 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
• 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.
• 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).
20. 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_nev7qqyHdsqb9gq9DkDRzljiLAFMtdvCPcHfu6TFzdt
ZAcxCciOwt4s9gxsD96Ya1myHU93tJiTIHJZs0zbCoUdZy; 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>
22. • HTTP / 1.0 – Stateless
Isto significa que 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, de largura de banda e de
memória.
• HTTP / 1.1 – Persistent
Possibilita que uma conexão seja estabelecida para enviar várias
requisições em seqüê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.
23. CLIENTE SERVIDOR
OPEN
CLIENTE SERVIDOR
OPEN
CLOSE
OPEN
TEMPO
CLOSE TEMPO
OPEN
CLOSE
HTTP / 1.1 – Persistent
CLOSE
HTTP / 1.0 – Stateless
26. Are
You
Kidding
Me
???
½ segundo a menos faz tanta
diferença assim???
O que é ½ segundo???
27. Em 2009 o Google fez um experimento onde expôs a um grupo de
usuários uma busca mais lenta.
“No experimento, o resultado por página aumentou de 10 para 30.
Essa alteração, aumentou o tempo de carregamento de 0.4s para 0.9s.
Resultado: As buscas diminuíram em 20%.
0,5s
28. O Yahoo! descobriu que, para cada 400ms de melhora na performance,
seu tráfego aumentava em 9%
400ms
A Amazon concluiu que apenas 100ms de melhora em seu site,
aumentou 1% seu faturamento.
100ms
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
29. "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
30. "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
31. 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
32.
33.
34. Criado em 1995
Responsável por 58% dos sites ativos no mundo.
Aproximadamente 102 Mi de sites ativos.
Implementa 100% do padrão HTTP/1.1;
Disponível para diversos SO's, além do Linux, para qual foi criado;
Bastante estável e seguro;
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.
35. IIS – Internet Information Service
Criado em 1996 – Windows NT 3.51
Responsável por aproximadamente 23 Mi de sites ativos
Muito utilizado para aplicações em ambientes MS
36. Criado em 2005
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 Mi de sites ativos em
3º lugar.
40. ENDEREÇO IP SERVIDOR DNS
nano /etc/network/interfaces nano /etc/resolv.conf
auto ethX
iface ethX inet static(ou dhcp)
nameserver XXX.XXX.XXX.XXX
address 172.17.X.X
netmask 255.255.0.0
gateway 172.17.250.1
Pressionar CTRL + X
Pressionar Y
Pressionar Enter (Salvar o arquivo no
Pressionar CTRL + X caminho indicado)
Pressionar Y APLICANDO AS CONFIGURAÇÕES
/etc/init.d/networking restart
Pressionar Enter (Salvar o arquivo no
caminho indicado)
41. Atualizar pacotes informações sobre repositórios
apt-get update
Manter o S.O. sempre atualizado
apt-get upgrade
Instalando VIM
apt-get install vim
Comandos Básicos VIM
Pressionar INSERT 1x = Inserir
Pressionar INSERT 2x = Substituir
Pressionar SHIFT+Q = Abre modo de salvamento/saída
Digitar wq = w - Salva o arquivo / q - Fecha o editor
! = Forçar Ex: wq! (Salva e sai forçadamente) / q! (Sai forçadamente)
42. • Instalar pacote VIM: apt-get instal vim
• editar o arquivo /etc/vim/vimrc e descomentar a linha
syntax on
43. • Instalar pacote NTPDATE: apt-get install ntpdate
• criar o arquivo ntp em /etc/cron.hourly
#!/bin/sh
#
# ATUALIZACAO DA HORA
ntpdate pool.ntp.br
exit 0
• Reiniciar o serviço CRON
/etc/init.d/cron restart
44. • Instalar pacote SSH: apt-get instal ssh
• editar o arquivo /etc/ssh/sshd_config
Port XXXX
...
PermitRootLogin no
...
PermitEmptyPassword no
...
PasswordAuthentication yes
• Editar arquivo securetty
cp /etc/securetty /etc/securetty.ori
echo “## Arquivo modificado ##” > /etc/securetty
• Reiniciar o serviço SSH
/etc/init.d/ssh restart
45. • Instalar pacote SSH: apt-get instal ssh
• editar o arquivo /etc/ssh/sshd_config
Port XXXX
...
PermitRootLogin no
...
PermitEmptyPassword no
...
PasswordAuthentication yes
• Editar arquivo securetty
cp /etc/securetty /etc/securetty.ori
echo “## Arquivo modificado ##” > /etc/securetty
• Reiniciar o serviço SSH
/etc/init.d/ssh restart
46. WORKER (PHP através de CGI)
PREFORK (PHP como módulo do apache)
• Cada request é tratato por um processo separado
• Tolerante a falhas
• Problema no processo filho não implica no pai
• Estável
• Pode ser utilizado com módulos não thread-safe
47. WORKER (PHP através de CGI)
apt-get install apache2-mpm-worker
apt-get install php5 php5-cgi php5-cli
apt-get install libapache2-mod-fcgid
Adicionar as linhas abaixo dentro da seção Directory nos arquivos dos sites
/etc/apache2/sites-enabled/xxxxxxx
AddHandler fcgid-script .php
FCGIWrapper /usr/lib/cgi-bin/php5 .php
Options ExecCGI
Ativar o Módulo: a2enmod NOMEDOMODULO (fcgid)
Desativar o Módulo: a2dismod NOMEDOMODULO
48. Para retirar a mensagem “Could not reliably determine the server's
fully qualified domain name, using 127.0.1.1 for ServerName”
Editar o arquivo httpd.conf e Adicionar a seguinte linha:
ServerName NOMEDOSERVIDOR
MYSQL: apt-get install php5-mysql
POSTGRE: apt-get install php5-pgsql
49. VHOST
Criar o arquivo de configuração do site na pasta sites-available
Editar o arquivo criado com as seguintes linhas:
ServerAdmin email@admin.com.br
ServerName www.nomedosite.com.br
DocumentRoot /var/www/pastadosite
<Directory /var/www/pastadosite/>
Criar a pasta conforme indicado no arquivo de conf.
Logs:
ErrorLog ${APACHE_LOG_DIR}/error_nomedosite.log
CustomLog ${APACHE_LOG_DIR}/access_nomedosite.log vhost_combined
50. Certificado SSL
apt-get install openssl ca-certificates
Criar pasta cert dentro de /etc/apache2 e entrar na pasta criada
Gerar a chave privada (Private Key):
openssl genrsa -des3 -out nome_certificado.key 1024 (2048)
Retirar a Senha da chave privada:
openssl rsa -in nome_certificado.key -out nome_certificado_nopwd.key
*** IMPORTANTE: executar chmod 600 nome_certificado_nopwd.key ***
Gerar o pedido de certificação (Certificate Signing Request):
openssl req -new -key nome_certificado.key -out nome_certificado.csr
*** O Comon Name, deverá ter o mesmo nome do servidor, exemplo: host.dominio.com.br***
Assinar o certificado (Self-Signed Certificate):
openssl x509 -req -days 365 -in nome_certificado.csr -signkey
nome_certificado.key -out nome_certificado.crt
51. Ativar o módulo SSL
a2enmod ssl
Editar o arquivo do site ssl com as seguintes linhas:
ServerAdmin email@admin.com.br
ServerName www.nomedosite.com.br
DocumentRoot /var/www/pastadosite
<Directory /var/www/pastadosite/>
Logs:
ErrorLog ${APACHE_LOG_DIR}/error_nomedosite.log
CustomLog ${APACHE_LOG_DIR}/access_nomedosite.log
vhost_combined
SSLCertificateFile /etc/apache2/cert/cert_vhost1.crt
SSLCertificateKeyFile /etc/apache2/cert/cert_vhost1_nopwd.key
52. Páginas de erro personalizadas
/etc/apache2/conf.d/localized-error-pages
Melhorar Segurança Básica
/etc/apache2/conf.d/security
ServerTokens Prod
ServerSignature Off
TraceEnabler Off
53. PREFORK (PHP como módulo do apache)
apt-get install apache2-mpm-prefork
apt-get install php5 libapache2-mod-php5
Para retirar a mensagem “Could not reliably determine the server's fully
qualified domain name, using 127.0.1.1 for ServerName”
Editar o arquivo httpd.conf e Adicionar a seguinte linha:
ServerName NOMEDOSERVIDOR
MYSQL: apt-get install php5-mysql
POSTGRE: apt-get install php5-pgsql
54. VHOST
Criar o arquivo de configuração do site na pasta sites-available
Editar o arquivo criado com as seguintes linhas:
ServerAdmin email@admin.com.br
ServerName www.nomedosite.com.br
DocumentRoot /var/www/pastadosite
<Directory /var/www/pastadosite/>
Criar a pasta conforme indicado no arquivo de conf.
Logs:
ErrorLog ${APACHE_LOG_DIR}/error_nomedosite.log
CustomLog ${APACHE_LOG_DIR}/access_nomedosite.log
vhost_combined
55. Certificado SSL
apt-get install openssl ca-certificates
Criar pasta cert dentro de /etc/apache2 e entrar na pasta criada
Gerar a chave privada (Private Key):
openssl genrsa -des3 -out nome_certificado.key 1024 (2048)
Retirar a Senha da chave privada:
openssl rsa -in nome_certificado.key -out nome_certificado_nopwd.key
*** IMPORTANTE: executar chmod 600 nome_certificado_nopwd.key ***
Gerar o pedido de certificação (Certificate Signing Request):
openssl req -new -key nome_certificado.key -out nome_certificado.csr
*** O Comon Name, deverá ter o mesmo nome do servidor, exemplo: host.dominio.com.br***
Assinar o certificado (Self-Signed Certificate):
openssl x509 -req -days 365 -in nome_certificado.csr -signkey
nome_certificado.key -out nome_certificado.crt
56. Ativar o módulo SSL
a2enmod ssl
Editar o arquivo do site ssl com as seguintes linhas:
ServerAdmin email@admin.com.br
ServerName www.nomedosite.com.br
DocumentRoot /var/www/pastadosite
<Directory /var/www/pastadosite/>
Logs:
ErrorLog ${APACHE_LOG_DIR}/error_nomedosite.log
CustomLog ${APACHE_LOG_DIR}/access_nomedosite.log
vhost_combined
SSLCertificateFile /etc/apache2/cert/cert_vhost1.crt
SSLCertificateKeyFile
/etc/apache2/cert/cert_vhost1_nopwd.key
57. Páginas de erro personalizadas
/etc/apache2/conf.d/localized-error-pages
Melhorar Segurança Básica
/etc/apache2/conf.d/security
ServerTokens Prod
ServerSignature Off
TraceEnabler Off