Início Facebook Twitter Vá para nosso Site Início Dicas Tutoriais Fale Conosco Image Map

Instalação do Apache - Parte I

O Apache que é um dos maiores servidores web que existem hoje em dia, sendo um dos mais bem sucedidos no quesito servidor web livre. Foi criado em 1995 por Rob McCool, então funcionário do NCSA (National Center for Supercomputing Applications). Suas funcionalidades são mantidas através de uma estrutura de módulos, permitindo que o usuário escreva seus próprios módulos.
 
Existe um Ranking (http://news.netcraft.com/archives/web_server_survey.html) dos servidores web mais utilizados no mundo. Segundo essa pesquisa, mais de 50% dos servidores web no mundo são Apache e esse número ainda pode ser maior, pois vários administradores de redes configuram seus servidores para não mostrar informações verdadeiras sobre a versão do servidor web, a fim de não facilitar ataques de crackers.

Agora que entendemos um pouco da história do Apache e o quanto ele é utilizado, vamos entender  alguns conceitos.

HTTP
HTTP (acrônimo para Hypertext Transfer Protocol, que significa Protocolo de Transferência de Hipertexto) é um protocolo de comunicação (na camada de aplicação segundo o Modelo OSI) utilizado para transferir dados por intranets e pela World Wide Web (WWW).

Apache MPM Worker e Pre Fork
De acordo com a documentação oficial do projeto Apache, é possível configura-lo para trabalhar com aplicações mais novas, aumentando o desempenho ou mantendo o modo optando por manter a compatibilidade e estabilidade com aplicações que trabalham nativamente com processos, estes modos são o MPM Worker e Pre Fork.

MPM Pre Fork: Trabalha utilizando a estrutura clássica de processos Unix, mantendo a compatibilidade com o Apache versão 1.X. Neste modo um processo Apache será responsável  por executar uma série de processos filhos, para atender as conexões que chegarem.

MPM Worker: Trabalha com uma implementação mista de processos e threads, possibilitando atender uma quantidade maior de processos sem a necessidade de um aumento de hardware, comparado com a configuração MPM Pre Fork. Neste modo o Apache mantém um processo controlando uma série de threads, o que aperfeiçoa o desempenho para aplicações que suportam threads.

Instalando o Apache2
Para consultar versões e realizar o download dos pacotes basta consultar o próprio site do projeto (http://httpd.apache.org/)

# aptitude install apache2-common apache2-mpm-prefork apache2-utils

Para o red hat ou o suse utilize o comando abaixo:

# yum install httpd
# service httpd start

Em algumas distribuições o Apache se chama Apache mesmo (na hora da instalação e gerenciamento de seus serviços), mas já no red hat / centOS ele se chama httpd.

Após instalar o Apache podemos acessa-lo de qualquer máquina, mas para acessar em sua própria máquina utilize o link HTTP://127.0.0.1. Caso não consiga veja se o Apache está rodando após a instalação:

# netstat -nptl | grep 80

A porta padrão para um servidor HTTP é a porta 80, caso o serviço do Apache não esteja rodando execute o comando abaixo para inicia-lo:

# /etc/init.d/apache2 restart.

Agora tente acessa-lo novamente, caso consiga inicia-lo vamos olhar seus arquivos de configuração.

# cd /etc/apache2
# ls

Descrição de alguns arquivos que serão encontrados dentro desse diretório:

apache2.conf : arquivo principal de configuração
httpd.conf : compatibilidade com Apache 1
ports.conf :  portas
sites-available e sites-enabled : guarda os virtual hosts do servidor
mods-available e mods-enabled : armazenam configurações de módulos

Outra curiosidade no red hat, todas essas configurações são encontradas dentro do arquivo /etc/httpd/conf/httpd.conf.

Vamos olhar um pouco o arquivo principal de configuração do servidor Apache, mas antes realize um back-up desse arquivo.

#cp apache2.conf apache2.conf.bck

Abra o arquivo com o vim

#vim apache2.conf

Vamos conhecer alguns parâmetros dentro desse arquivo.

**Timeout 300**
Serve para que seu Apache não fique muito tempo esperando a resposta de um cliente. Quando alguém acessa o seu site, vocês passam a trocar informações conforme o seu cliente vai acessando as páginas. Seu Apache vai disponibilizando o site e esse será o tempo máximo que o seu server vai esperar a resposta do cliente. Esse cliente, nada mais é do que o browser de alguém acessando seu site e caso não se peça mais nada para o server acaba o tempo definido e ele descarta a conexão.

mpm_prefork_module
O MPM é o Multi Processing Modules, ou seja, os módulos de multiprocessamento que nada mais é do que como irá funcionar o processamento do Apache em relação aos acessos no site. Na versão 1 do Apache o mesmo só usava um modo de processamento, que era baseado em prefork. O Apache assim que iniciava fazia um fork que gerava os processos filhos para que esses ficassem responsáveis pelas solicitações ao site.

Ex.
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0

StartServers
Indica a quantidade inicial de processos do servidor na hora que inicializa.

MinSpareServers
Define o número mínimo de processos ociosos dentro do servidor.

MaxSpareServers
Máximo de processos ociosos dentro do servidor, caso o servidor possua uma grande quantidade de memória é bom não abaixar esse número e sim aumentar.

MaxClients
Conexões aceitas. Quando o Aapache chega no limite ele começa a ficar lento colocando as outras requisições em uma fila de espera.

User www-data / Group www-data
Indicam quem é o usuário e grupo dono dos processos do Apache. Na versão antiga o usuário e grupo dono dos processos era o httpd, nessa versão nova é o www-data.

ErrorLog
Define em qual arquivo o Apache irá gravar seus logs, que normalmente fica em:

/var/log/apache2/error.log

Arquivo ports.conf.

#cat ports.conf
Listen 80

Dentro desse arquivo precisamos somente definir em qual porta o Apache ficará de escuta,  ou seja, onde irá receber suas requisições.

Acesse a pasta sites-available que está dentro de /etc/apache2. Nessa pasta iremos criar, caso não exista, um arquivo chamado default, para indicar ao Apache onde ficará o diretório de nossos sites. Execute a sequencia de comandos abaixo:

#vim default

Insira essa linha dentro desse arquivo:

DocumentRoot /var/www/

É essa linha que indica ao Apache em qual pasta ficarão nossos sites.
Coloque algum arquivo dentro dessa pasta e tente acessa-los através da URL HTTP://127.0.0.1/nome_arquivo

Nesse arquivo também existe uma linha (RedirectMatch ^/$ /apache2-default/) que redireciona o usuário para o caminho default do Apache.

Explicando essa linha:

^ = começo de linha
$ = fim de linha
http://127.0.0.1/ <- o “/” vai casar

Caso não queira que isso aconteça comente essa linha

# RedirectMatch ^/$ /apache2-default/

Iremos agora configurar o Apache para mostrar menos informações para o usuário, abra o arquivo /etc/apache2/conf.d/security e execute a sequencia de comandos abaixo:

# vim /etc/apache2/conf.d/security
ServerSignature Off
ServeTokens Prod
TraceEnable Off

Para validar e aplicar essas configurações reinicie o servidor Apache.

/etc/init.d/apache2 restart

Tente acessar novamente o link http://127.0.0.1/

Virtual Hosts
O Virtual host permite hospedar vários sites, com domínios diferentes, usando um único servidor e um único endereço IP.

Qual a desvantagem disso?
Não se pode ter um volume muito grande de sites, pois os recursos como hardware e banda são limitados.

São configurados nestes dois diretórios:

/etc/apache2/sites-available: Neste diretório ficam todos os arquivos de configuração dos domínios virtuais.

/etc/apache2/sites-enabled: Neste diretório ficam todos os domínios virtuais ativos, que na verdade são links simbólicos para os arquivos de configuração localizados no diretório citado anteriormente.

Sites available são as configurações disponíveis e sites enables as ativas.

Criando o virtual Host
Vamos criar um arquivo de teste, execute o comando abaixo:

#vim /etc/apache2/sites-available/teste.com.br

Dentro desse arquivo digite:

NameVirtualHost *
DocumentRoot /var/www/teste
ServerName www.teste.com.br
ErrorLog /var/log/apache2/teste-error.log
CustomLog /var/log/apache2/teste-access.log common

Crie o documento dentro desse host.

# mkdir /srv/teste-ht
# cd /srv/teste-ht
# echo "Oi mundo" > index.html

Ative esse host/site.

#a2ensite teste.com.br

a2: apache2
en: enable
site: site

Verifique a sintax das configurações realizadas antes de reiniciar o Apache e aplique os comando abaixo.

apache2ctl  –S

Após realizar esse comando dê um reload no Apache para que ele possa ler novamente os arquivos de configuração. Caso o reload não funcione corretamente restarte-o.

/etc/init.d/apache2 reload
/etc/init.d/apache2 restart

Acesse o host pelo link http://www.teste.com.br

Caso não acesse acrescente a linha abaixo no arquivo de resolução de nomes, somente para ter certeza que não houve erros.

# vim /etc/hosts
127.0.0.1 www.teste.com.br

O NameVirtualHost diz ao Apache que ele deve mapear todos os IP´s do servidor para os hosts virtuais abaixo.

A função do Apache é fornecer páginas html ou outros arquivos através de download. Se quer colocar páginas com script PHP, é preciso acionar o módulo para isso.

Instalando o PHP
Para instalar o PHP dentro de nosso servidor Apache execute os comandos abaixo:

# aptitude install libapache2-mod-php5 php5

Instalamos o php5 e seus devidos módulos para o apache2. Se estiver usando o red hat utilize o comando abaixo:

# yum install php

#apache2ctl –M

Verifique se o modulo do php5 está ativo dentro do nosso servidor, crie o arquivo abaixo com o conteúdo phpinfo ()
?>

#vim /var/www/index.php

Acesse o link HTTP://127.0.0.1/index.php  para verificar se está funcionando corretamente o módulo.

O PHP é uma linguagem de programação bastante robusta. A partir do momento que ativamos o módulo do PHP dentro do nosso servidor o tornamos um servidor de aplicativos e também a execução de comandos a partir do PHP, mas é possível desativar essas opções, veja:

Edite o arquivo abaixo:

# vim /etc/php5/apache2/php.ini

O arquivo php.ini configura todo o comportamento do PHP dentro do Apache, por exemplo, no PHP existe a função "exec" ela faz exatamente o que diz: executa qualquer comando na máquina.
Isso é ruim, não pode ser permitido para uma aplicação web, pois muitas aplicações são bugadas como blogs, fórums, etc, e permitem a injeção de comandos por formulários.
Então, temos que desabilitar o exec. Essa opção fica aproximadamente na linha 222, coloque a opção abaixo:

disable_functions = exec

Salve e reinicie o Apache.
Edite o index.php, o código PHP fica sempre entre <?php. ...?>
No index.php coloque:
exec("ls /etc");
Acesse novamente o índex.php, você deve receber um mensagem:
Warning: exec() has been disabled for security reasons in /var/www/index.php on line 2

Algumas opções do PHP.ini
Essas opções abaixo podem ser desabilitadas, para fins de segurança do seu servidor:

show_source
system
shell_exec
passthru
popen
symlink

expose_php = Off -> Essa opção está relacionada mais com privacidade do que com a segurança propriamente dita. Com expose_php habilitada, será possível determinar se o PHP está instalado no servidor. Isso pode ser feito com uma consulta ao servidor web.
Habilitando essa diretriz, a versão do PHP também ficará exposta. Em um caso extremo de haver algum exploit com alguma versão em específico do PHP, essa informação pode ser valiosa para pessoas mal intencionadas.

Exemplo:
$ telnet localhost 80 Trying 127.0.0.1… Connected te localhost. Escape
character is ‘A]’. HEAD / HTTP/1.0
HTTP/1.1 200 OK Date: Sun, 12 Aug 2007 01:33:33 GMT Server:
Apache/2.2.3 (Distro) PHP/5 .2.1 X-Powered-By: PHP/5.2.1 Connection: close
Content-Type: text/html; charset=IS0-8859-1
Connection closed by foreign host.

register_globals = Off -> Essa opção não representa um problema de segurança no PHP, porém pode proporcionar potenciais riscos à segurança do sistema por induzir o desenvolvedor ao erro. Não existe uma boa razão para habilitar essa diretriz e, de modo geral, register_globals deve permanecer sempre com o valor Off.
A partir da versão 4.2 do PHP, essa diretriz foi desabilitada no arquivo PHP.INI padrão e até então essa pequena alteração tem gerado muitas dores de cabeça para desenvolvedores PHP que mantêm scripts antigos, pois é muito comum encontrar códigos que foram escritos sem nenhuma preocupação com relação ao registro de variáveis.

Essas opções abaixo permitem abrir ou processar uma página ou arquivo externo dentro do script php. Vários servidores de hospedagem desativam essas opções:
allow_url_fopen = Off
allow_url_include = Off

Já configuramos o servidor e o deixamos mais seguro, agora configure o PHP para acessar a base de dados.

Habilitando uso de banco de dados
Para instalar o módulo do PHP para conexão ao mysql execute o comando abaixo:

# aptitude install php5-mysql

Se estiver usando o red hat utilize o comando:
# yum install php-mysql

Caso queira usar o postgresql, utilize este comando:

# aptitude install php5-pgsql

O módulo instalado e usável?  Vamos agora instalar o nosso sgbd.

Instalando o Mysql
Execute o comando abaixo para instalar o mysql:

# aptitude install mysql-server

Se estiver utilizando o red hat use esse comando:

# yum install mysql mysql-server

Inicie a base de dados com o comando abaixo:

# mysql_install_db

Esse comando irá criar uma base de dados dentro do mysql.

Agora start o serviço.

# /etc/init.d/mysql start

Para definir uma senha de root dentro da base, utilize esse comando:

# mysqladmin -u root password

Se o caso for trocar a senha do root utilize esse comando:

# mysqladmin -u root –p password

Para acessar a base de dados utilize o seguinte comando:

# mysql -u root -p

Para sair use o comando abaixo:

mysql > quit

Escrito por: Rafael Soares Souza