Dicas sobre o servidor web Apache

  • Identifique-se para criar novos tópicos neste fórum
  • Visitantes anônimos não podem postar neste fórum
 
Administração  Membro   Postagens: 2360

Mostrando páginas de um servidor Intranet num servidor Internet


Às vezes você se depara com uma configuração em que você tem um servidor Apache rodando para a Internet, e outros servidores rodando internamente. Só que como fazer para que os utilizadores da Internet acessem os vários servidores internos? Uma solução seria configurar o firewall para que redirecione as respectivas conexões para os servidores internos via NAT. Mas o problema disso é que você ainda não consegue redirecionar na mesma porta de acordo com o nome do host, ou seja, não tem a habilidade de fazer uma configuração de Domínio Virtual no firewall.


Vamos supor que eu tenha três servidores internos e um externo. Cada um destes servidores internos carrega um portal diferente, rodando sob Linux e Apache (SIM!), enquanto que no servidor externo, eu tenho um Apache rodando com alguns portais simples. Como fazer para que este Apache no servidor externo mostre aos utilizadores da Internet as páginas que estão nos servidores internos?


Para solucionar este caso, você pode simplesmente utilizar o poderoso mod_rewrite para pegar todo um endereço da rede Interna e colocar disponível no seu servidor Internet transparentemente para o usuário. No servidor externo, você pode colocar as seguintes linhas na configuração principal ou dentro de um domínio virtual (<VirtualHost>):




RewriteEngine on.
RewriteCond %{HTTP_HOST} ^(www\.)?nomedodomínio\.com\.br
RewriteRule (.*) http://192.168.0.1$1 [P]

Neste exemplo, quando o utilizador acessar o domínio virtual nomedodomínio.com.br, o Apache coletará as informações do servidor interno 192.168.0.1 e colocará disponível transparentemente para o usuário.


Mais outros exemplos:




RewriteEngine on.
RewriteCond %{HTTP_HOST} ^(www\.)?nomedodomínio\.com\.br
RewriteRule ^/site/(.*) http://192.168.0.2$1 [P]

Isto faz com que o diretório /site dentro do domínio nomedodomínio.com.br seja associado ao servidor interno 192.168.0.2.


E por aí vai. As possibilidades são muitas, e se você souber mexer com expressões regulares e o mod_rewrite do Apache, você consegue fazer tudo!


P: Como posso bloquear outros portais de fazer links diretos em meus arquivos?


R: Geralmente quando você tem um portal grande, alguns utilizadores sem ética começam a copiar tudo e deixar links diretos para os seus arquivos em páginas próprias. Para evitar muitos casos disso, pode-se usar o mod_rewrite.


É só colocar as seguintes linhas dentro da sua configuração principal ou de um domínio virtual (<VirtualHost>):




RewriteEngine on.
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?nomedodomínio\.com\.br/.*$ [NC]
RewriteRule \.(mid|wav|mp3|zip|avi|rm|ram|swf|mpg|wmv|pdf)$ http://nomedodomínio.com.br/download_negado.php [NC,R,L]

Este exemplo acima fará com que os portais que não estão inclusos no domínio nomedodomínio.com.br tenham seu acesso negado ao endereço direto para os arquivos com as extensões: .mid; .wav; .mp3; .zip; .avi; .rm; .ram; .swf; .mpg; .wmv; .pdf. Ou seja, se alguma outra pagina fizer um endereço direto para um arquivo .mp3 do seu servidor por exemplo, em vez dele pegar o arquivo .mp3, ele cairá na página http://nomedodomínio.com.br/download_negado.php, que poderá conter um aviso de que o download direto foi negado.


P: Eu tenho muitos domínios virtuais, como posso fazer para gerar logs separados de cada um?


R: Se você usa o Apache para apenas alguns sites, você nunca passará por este problema. Mas em servidores em que a quantidade de domínios virtuais é muito grande, surge a necessidade de você separar os logs de acesso para cada um dos domínios virtuais, com o fim de fazer a análise destes logs e apresentar estatísticas para os utilizadores de cada domínio (O Webalizer faz isso). Mas para cada arquivo de log, o Apache abre um processo de escrita, e o sistema tem um certo limite de processos, ou seja, o Apache só poderá abrir alguns poucos processos para escrever nos logs.


Para resolver isso, existe um utilitário chamado split-logfile (que vem junto com o Apache) que separa os logs de acordo com o domínio virtual. Para fazer funcionar, primeiro retire todos os logs dos seus domínios virtuais e adicione apenas as seguintes linhas de log na configuração principal do seu servidor (e não do domínio virtual):




LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined.
LogFormat "%v %h %l %u %t \"%r\" %>s %b" common.

CustomLog "/var/www/logs/access_log" combined.
ErrorLog "/var/www/logs/error_log"

As primeiras duas linhas vão criar o formato da linha de log que o Apache irá escrever. A única diferença para o formato padrão é o acréscimo do %v no início, que indica o domínio virtual usado. As duas últimas linhas indicam onde o log será gravado (o de acesso e o de erros do servidor).


Agora reinicie ou recarrege o seu Apache, e o seu arquivo de log estará sendo escrito de uma forma diferente. Agora vamos separar os logs por domínio virtual, e para isso é muito simples, é só criar um pequeno script que fará todo o processo:


/usr/local/bin/separa-logs-apache




#!/bin/bash.
#
# Separa os logs.
Cd /var/www/logs/splitted.
/usr/bin/split-logfile < /var/www/logs/access_log.

# Zera o log principal.
Echo -n > /var/www/logs/access_log.

Não esqueça de criar antes também o diretório /var/www/logs/splitted. Onde estarão armazenados os logs separados.


Agora é só rodar este script e verificar o conteúdo do /var/www/logs/splitted. Existirá um arquivo .log para cada domínio virtual, sem o nome do domínio virtual (string %v do LogFormat), permitindo que você use normalmente o arquivo de log (para fazer análises com o Webalizer por exemplo).


Fonte:

http://devin.com.br/dicas_apache/

  Pesquisa avançada






Entrada

Codinome:


Senha:





Perdeu a senha?  |Cadastre-se!


Quem nos visita
Há 37 visitantes neste momento... (22 na seção Fóruns)

Associados: 0
Anônimos: 37

outros...

Banner XOOPS Cube