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
- Bacharel em Sistemas de Informação – UMC, Analista de Sistemas. NET/C# há mais de 4 anos, desenvolvedor Salesforce na MakeITSimple. DATA CENTER TECHNICAL SPECIALIST (DCTS), CERTIFIED LINUX ADMINISTRATOR (CLA11), LPIC-1.
- Perfil no LinkedIn: http://br.linkedin.com/pub/rafael-soares-souza/43/609/107