Fork me on GitHub
Você esta em:Home » Destaque » Ngnix – Aprenda a criar subdominios, restringir acesso e colocar senha nos diretórios

Ngnix – Aprenda a criar subdominios, restringir acesso e colocar senha nos diretórios

Aprenda de forma simples a usar esse fantástico concorrente do Apache

Nginx – Poderoso, Fácil e Muito Rápido!

Para quem (assim como eu) começou com o PHP, uma das opções mais viáveis para servir projetos na Web sempre foi o ApacheOpen source, prático e disponível em quase toda hospedagem de respeito (afinal, ele vem por padrão em quase toda distro Linux), há anos que ele faz a famosa tríade “AMP” (ApacheMySQL e PHP).

Acontece que com as demandas recentes que a internet tem exigido de algumas aplicações Web (como Twitter e Facebook), a necessidade por performance começou a ser uma grande premissa em determinados tipos de projetos. E é apoiado nesse cenário que o Nginx vem ganhando cada vez mais força no mercado. Afinal, não é a toa que ele é conhecido por “aguentar porrada”.

A verdade sobre o Nginx (ou não)

Nginx é um servidor Webproxy reversoproxy balanceador de carga, e faz praticamente tudo que o Apache faz, só que muito mais rápido!

Técnicamente, o Nginx consome menos memória que o Apache, pois lida com requisições Web através do conceito de “event-based web server”, já o Apache é baseado no conceito “process-based server”. David E. Chen faz uma excelente analogia entre os dois conceitos em seu artigo “Explain “Event-Driven” Web Servers to Your Grandma“.

Eles não são necessariamente “concorrentes”, Apache e Nginx podem trabalhar juntos! É possível diminuir o consumo de memória do Apache fazendo com que as requisições Web passem primeiro pelo Nginx. Desse modo, o Apache não precisa servir arquivos estáticos, e pode depender do bom controle de cache feito pelo Nginx.

Bom, a intenção não é denegrir a imagem do Apache (até parece que um simples mortal como eu conseguiria tal feito), então vamos adiante.

Mais informações sobre configuração de um servidor Nginx em: http://www.deivison.com.br/blog/2012/11/01/voce-gostaria-de-melhorar-em-ate-500-o-seu-magento-com-amazon-nginx-varnish/

Números:

Atualmente 4% dos servidores web estão trabalhando com o Nginx, como consta aqui:
http://googleonlinesecurity.blogspot.com/2007/06/web-server-software-and-malware.html
Mais de 2 milhões de domínios virtuais estão apontados para servidores com o Nginx.
Para ter idéia do crescimento do Nginx, veja os dados da Netcraft, em abril tinha 1 milhão de domínios:
http://survey.netcraft.com/Reports/200804/
Em junho já passa dos 2 milhões:
http://survey.netcraft.com/Reports/200806/
Não se pode negar o seu sucesso em ascensão.
É extremamente rápido, agüenta com muita carga, e mesmo submetido a stress de conexões tem um baixo consumo de CPU e memória.
Considero ele o mais robusto servidor web da atualidade.
O site oficial é www.nginx.net e a documentação em inglês pode ser encontrada em:

Neste artigo quero apenas dar uma introdução ao Nginx e despertar o interesse por ele, para que encontrem nele excelentes soluções.  Abaixo as configurações serão feitas em cima do arquivo default.conf ou seudominio.conf que ficam na pasta /etc/nginx/conf.d/ de sua distribuição linux.

Obs: Ainda não possuo conhecimentos avançados em Nginx, estou caminhando para isso rs. Decidi escrever esse artigo para fazer uma extensão do meus estudos e não sobre carregar meu cérebro rs

1 – Como restringir acesso a determinadas pastas?

Bem existirá momentos que vc não gostara de liberar acessos a determinadas pastas do seu Magento. É só procurar no Google que vc achará milhares de sites com o local.xml desprotegido, assim dependendo do seu provedor, uma pessoa mau intencionada poderá entrar facilmente em seu banco de dados e baixa-lo além de tb ele pode trocar sua senha do administrador Magento para navegar em sua loja e causar um caos!

Com o Nginx é fantástico de como bloquear isso, veja esse exemplo:

## These locations would be hidden by .htaccess normally
location ~ (/(app/|includes/|/pkginfo/|var/|report/config.xml)|/\.svn/|/\.git/|/.hta.+) {
deny all;
}
Nesse exemplo estamos setando que o Nginx não permitira acesso a essas pastas do seu Magento. Então logicamente se vc add um arquivo.php dentro de um diretório desses descritos acima, somente o php terá permissão de execução do mesmo e você não terá acesso a esse arquivo publicamente pelo seu navegador!

2 – Protegendo diretórios por senha

Muito utilizado no Apache o arquivo .htaccess faz esse papel junto com o htpasswd que contém a senha de acesso a pasta. No Nginx você tb terá em mãos essa ferramenta, que se utiliza dessa forma:
location /var/export/ { ## Allow admins only to view export folder
auth_basic “Restricted”; ## Message shown in login window
auth_basic_user_file htpasswd; ## See /etc/nginx/htpassword
autoindex on;
}
Onde no htpassword conterá a senha de acesso a pasta /var/export/

3 – Proibindo acesso aos arquivos ocultos e arquivos de execução como .htaccess

O comando a ser usado é o seguinte:
location /. { ## Disable .htaccess and other hidden files
return 404;
}
Com esse comando acima restringimos acesso aos arquivos ocultos e aos arquivos de execução.

4 - Subdomínios e Redirecionamento para uma pasta

Bem esse aqui me deu uma certa dor de cabeça para fazer. Vou adicionar o script que faz o redirecionamento e depois explicar.
server {
listen 80;
server_name seusite.com.br *.seusite.com.br;
##Pega subdominio e add https
if ($host ~* “^([^.]+(\.[^.]+)*)\.seusite.com.br$”){
set $subd $1;
rewrite ^(.*)$ https://$subd.seusite.com.br$1 permanent;
break;
}
##Pega principal e redireciona subdominio com https
if ($host ~* “^seusite.com.br$”){
rewrite ^(.*)$ https://shop.seusite.com.br$1 permanent;
break;
}
}
server { ##configurações do subdominio
listen 80;
listen 443;
## SSL directives might go here
server_name shop.seusite.com.br 54.232.99.116;
ssl on;
ssl_certificate /usr/share/nginx/certificado/seusite.crt;
ssl_certificate_key /usr/share/nginx/certificado/servidor.key;
location / {
root /usr/share/nginx/html;
index index.php index.html; ## Allow a static html file to be shown first
try_files $uri $uri/ @handler; ## If missing pass the URI to Magento’s front handler
expires 30d; ## Assume all files are cachable
}
Bem vamos lá as explicações! Logo no primeiro server fazemos a detecção das requisições no primeiro IF, por exemplo se vir uma requisição para shop.seusite.com.br serão redirecionadas para usar https. Não que vc vá usar o seu site todo em https, até pode sem problemas, mas é mesmo para ilustrar como mudar a requisição de http para https.
No segundo IF, pegamos requisição so dominio principal(seusite.com.br) e redirecionamos para o shop.seusite.com.br utilizando tb o https://
Já no segundo server, estou fazendo a configuração para a requisição somente para o server_name shop.seusite.com.br. Ou seja, nesse server seguira com todas as configurações passadas acima para restrição e bloqueio de pastas do Magento, além de também setarmos em root /usr/share/nginx/html a pasta base para esse processo. Caso eu quisesse criar uma outra configuração para um outro subdominio chamado deivison.seusite.com.br eu teria que adicionar mais um server com o server_name deivison.seusite.com.br e tb fazer as demais configurações de rescrita de URL, pois um wordpress não utiliza as mesmas configurações de rescrita de URL que o Magento né? Então teria que buscar na web como fazer as recritas de URL para o Wodpressa no Nginx.
Outro ponto importante nesse mesmo terceiro server criado, seria a pasta que seria a root do projeto, que poderia ser assim root /usr/share/nginx/html/deivison;
Então todas as requisições para o domínio deivison.seuserver.com.br iria ser add o https e utilizaria como pasta de base a /usr/share/nginx/html/deivison
Arquivo completo da configuração do default.conf:  https://gist.github.com/4595778

Observações finais:

Acredito que que o Nginx veio para ficar! No PHP in Rio tive a oportunidade de assistir uma palestra do Rafael Martins que é desenvolvedor e um dos responsáveis pelo servidor da Globo.com utilizando Nginx como base.

Na palestra ele demostrou a velocidade do Nginx comparando com o Apche e também comentou sobre o cache do Nginx. Pelo que entendi o Nginx junto com o Varnish carregam todo o site para a memória do servidor, deixando assim o server extremamente rápido.

Ele comentou também que o Nginx consegui trabalhar a estrega da página por Streaming Ai já é um processo ninja e tenho que estudar mais rs. Abaixo deixo alguns links que busquei rapidamente no Google e que falam da utilização do Nginx pela Globo.com

404 com nginx

Ele comentou também que no Nginx, caso um usuário solicite uma página e a mesma já não existe no servidor(404), ele irá entregar o último cache válido que esta na memória do servidor.

O Nginx já tem um sistema de cache que consegue atender a 90% dos sites. Outro ponto é, o cache das páginas 404 e um cache de uma página normal, podem ser cacheados com tempos diferentes, por exemplo:
        proxy_cache_valid  200 302  10m;
        proxy_cache_valid  404      1m;
Outras fontes de estudo do cache 404 do Nginx:
Bem espero ter ajudado e caso encontre algum erro favor comentar que consertarei! Como disse acima ainda estou aprendendo graças do Tutorial do grande Ricardo Martins, que escreveu de forma excelente o artigo de como utilizar o AWS com Nginx. Antes desse tutorial eu nem sabia como iniciar minhas pesquisas na utilização do AWS junto com Nginx. Então assim como a atitude nobre que ele teve em compartilhar isso conosco, quero também dar continuidade aos meus estudos e tb quem sabe passar meus conhecimentos para outras pessoas e assim poder ajudar e contribuir com a aprendizagem colaborativa! vlw pessoal!
Fontes:

Sobre o Autor

Designer, Web Developer & Linux Administrator

Meu nome é Deivison Arthur, tenho 29 anos, sou Administrador Linux, Analista de Sistema, Webdesigner e Pesquisador. há mais de dez anos. Nasci no Rio de Janeiro, atualmente trabalho como Gerente de Tecnologia e E-commerce at Grupo FFernandes e Freelancer nas horas vagas. Desenvolvimento em Joomla, Wordpress, Drupal, Magento e outros GPLs...

Quantidade de Artigos : 114

Comentários (4)

  • Marcio

    Olá Deivison,

    Estou tentando fazer a seguinte configuração no nginx.

    Tenho a seguinte estrutura:
    /usr/share/nginx/html/meusite.com.br/

    E dentro da pasta “meusite.com.br” vou colocar a instalação da minha loja magento.

    E quando eu eu acessar meusite.com.br no navegador ele fosse acessar os arquivos dentro de /usr/share/nginx/html/meusite.com.br/ e não no padrão /usr/share/nginx/html/

    Estou tentando fazer esse configuração no meu nginx.conf, mas sem sucesso até o momento.
    Poderia tentar me dar uma ajuda?

    Abraço,
    Marcio.

    Responder
  • Álvaro

    Olá

    Estou com uma dúvida na configuração do proxy reverso.
    Tenho um servidor com vários serviços rodando no tomcat (8080), no meu caso gostaria de redirecionar, via proxy reverso, o trafego para o outro servidor, por exemplo:
    quando digitar o endereço: teste.domain.local/site
    Redirecionar para o endereço: 10.10.10.40:8080/site

    Como poderia fazer isso no NGINX?

    Responder

Enviar Comentário

© 2012 Powered By Wordpress, Deivison Arthur

Ir para cima