-
Notifications
You must be signed in to change notification settings - Fork 96
Apache_HTTP_ Server_ Configuracoes
O servidor Apache (ou Servidor HTTP Apache, em inglês: Apache HTTP Server, ou simplesmente: Apache) é o mais bem sucedido servidor web livre. Foi criado em 1995 por Rob McCool, então funcionário do NCSA (National Center for Supercomputing Applications). Numa pesquisa realizada em dezembro de 2007, foi constatado que a utilização do Apache representa 47.20% dos servidores ativos no mundo. Em maio de 2010, o Apache serviu mais de 54,68% de todos os sites e mais de 66% dos milhões de sites mais movimentados. É a principal tecnologia da Apache Software Foundation, responsável por mais de uma dezena de projetos envolvendo tecnologias de transmissão via web, processamento de dados e execução de aplicativos distribuídos.
O servidor é compatível com o protocolo HTTP versão 1.1. Suas funcionalidades são mantidas através de uma estrutura de módulos, permitindo inclusive que o usuário escreva seus próprios módulos — utilizando a API do software.
Fonte: http://pt.wikipedia.org/wiki/Servidor_Apache
Não faz parte do escopo deste documento descrever o processo de instalação do Apache. Neste documento vamos mostrar como foram feitas as configurações dos módulos utilizados no projeto Siga.
- Sistema Operacional: Red Hat Enterprise Linux 6.
- Versão do Apache: 2.2.15
- Editor de texto utilizado: vimeo (mas você pode utilizar o editor de sua preferência)
Para informações sobre como instalar o Apache visite a página http://httpd.apache.org/download.cgi
Basicamente, toda a configuração do Apache gira em torno do arquivo httpd.conf
. Este arquivo fica localizado na pasta de instalação do apache dentro do diretório conf.
Ex: /etc/httpd/conf/httpd.conf
Todo arquivo de configuração (.conf
) do apache quando inserido no diretório /etc/httpd/conf.d/
é carregado automaticamente.
No momento da criação deste documento, os módulos do Apache utilizados para o projeto Siga são:
mod_cache
mod_cluster
mod_deflate
mod_expires
mod_snmp
mod_ssl
Toda a configuração poderia ter sido feita diretamente no arquivo httpd.conf, mas esta abordagem não seria a melhor opção na hora de manter as configurações dos módulos. Também decidimos separar a configuração de cada múdulo em um arquivo específico. Por uma questão de organização, também decidimos criar um diretório específico para armazenar os arquivos de configuração dos múdulos utilizados no projeto Siga.
Para facilitar o entendimento, o diretório de instalação do apache será referenciado como [Ex:
APACHE_HOME=/etc/httpd/`
- Mova-se para o diretório de instalação do apache (
APACHE_HOME
):
cd /etc/httpd/
- Crie o diretório onde serão arazenados os arquivos de configuração dos módulos do projeto:
mkdir conf.d/jboss
- Mova-se para o diretório de configuração dos módulos do projeto
cd conf.d/jboss
Esta configuração habilita o cache do conteúdo estático (imagens, css, js, etc) no lado do servidor Apache. Dessa maneira esse tipo de conteúdo é servido direto do cache sem onerar o servidor de aplicação com requisições de conteúdos estáticos. Os arquivos serão gravados (cacheados) no diretório /var/cache/httpd/mod_cache
.
- Antes de configurar o mod_cache_disk é necessário montar o diretório de cache como tmpfs para que o acesso ao cache seja feito em memória. Para isso acrescente a seguinte linha no arquivo '
/etc/fstab
' como usuário root:
tmpfs /var/cache/httpd/mod_cache tmpfs size=256m,noexec,nodev,mode=700,uid=apache 0 0
- Ainda como root digite o comando abaixo para montar o novo ponto de montagem
mount -a
-
Crie o arquivo de configuração do módulo mod_cache dentro do diretório de configurações dos módulos do projeto
[-
vim mod_cache.conf` -
adicione a configuração abaixo:
#-----------------------------------------
# Habilita cache de conteudos estaticos
#----------------------------------------
1. Cache proxied url's
1. If an item doesn't have an expiry header, expire it from cache after 12h
#CacheDefaultExpire 43200
1. define the maximum lifetime of all objects as 12h (3600sec * 12)
1. The CacheMaxExpire directive specifies the maximum number of seconds
1. for which cachable HTTP documents will be retained without checking the origin server
CacheMaxExpire 43200
#Ignore the fact that a response has no Last Modified header.
CacheIgnoreNoLastMod On
CacheIgnoreCacheControl On
CacheRoot /var/cache/httpd/mod_cache
-
Cache proxied url's
CacheEnable disk /siga/sigalibs
CacheEnable disk /sigaex/sigalibs
CacheEnable disk /sigawf/sigalibs
-
Evita o cache do Header Set-Cookie
-
jsessionid (resposavel pela persistencia de sessao do cliente http)
CacheIgnoreHeaders Set-Cookie
-
Introduced in Apache Httpd 2.2.14
#CacheIgnoreURLSessionIdentifiers jsessionid JSESSIONID
-
I/O operations are proportionally more expensive for small objects, so they
-
should be the ones included in cache. Avoid including large files.
-
in bytes
CacheMinFileSize 1
CacheMaxFileSize 1000000
-
How many directories to have in cache
CacheDirLevels 5
-
Length of directory names in the cache
CacheDirLength 3
-
Setup logging so we can see cache hits, misses, and revalidate cache items
SetEnv CACHE_MISS 1
LogFormat '"%h %l %u %t "%r " %>s %b JSESSIONID:%{JSESSIONID}C Set-Cookie req/res:/ %{Set-Cookie}o CACHE_MISS[cache
#LogLevel debug
CustomLog /var/log/jboss/siga-cached.log cache
-
Salve e feche o arquivo.
-
Configure o daemon
htcacheclean
para limitar o cache em 250MB de forma a não estourar o espaço em disco.
vim htcacheclean
Adicione o conteúdo abaixo ao arquivo.
#!/bin/bash
#
# htcacheclean is used to keep the size of mod_disk_cache's storage within a certain limit.
# This tool can run either manually or in daemon mode. When running in daemon mode,
# it sleeps in the background and checks the cache directories at regular intervals for cached content to be removed.
# You can stop the daemon cleanly by sending it a TERM or INT signal.
#
# chkconfig: - 90 15
# processname: htcacheclean
htcacheclean -d30 -n -t -p /var/cache/httpd/mod_cache -l 250M -i
-
Salve e feche o arquivo.
-
Após criar o script de inicialização do Daemon htcacheclean é necessário adicioná-lo ao sistema de inicialização do SO. Execute o seguinte comando como root:
chkconfig –add htcacheclean
chkconfig htcacheclean on
Este Daemon é responsável pela verificação periódica do diretório de cache usado pelo Apache Httpd. Conforme configurado no scritpt (/etc/init.d/htcacheclean
) o cache será verificado a cada 30min e quando atingir uma utilização de 500MB ele será esvaziado automaticamente.
Caso queira forçar a limpeza do cache manualmente, basta parar o serviço Httpd e em seguida remover o conteúdo do cache com os comandos abaixo:
service httpd stop
rm -rf /var/cache/httpd/mod_cache
service httpd start
Para mais detalhes sobre a configuração do mod_cache no Apache Httpd consulte a referência oficial em http://httpd.apache.org/docs/2.2/mod/mod_cache.html.
mod_cluster é um balanceador de carga httpd-based. Como mod_jk e mod_proxy, mod_cluster usa um canal de comunicação para transmitir pedidos httpd para um de um conjunto de nós de servidor de aplicação. Ao contrário do mod_jk e mod_proxy, mod_cluster utiliza uma conexão adicional entre os nós do servidor de aplicação e httpd. Os nós do servidor de aplicação usam essa conexão para transmitir fatores server-side de balanceamento de carga e eventos do ciclo de vida, de volta para o httpd através de um conjunto personalizado de métodos HTTP, chamado de Mod-Cluster Management Protocol (MCMP). Este canal permite ao mod_cluster obter feedback adicional para oferecer um nível de inteligência e granularidade não encontrado em outras soluções de balanceamento de carga.
Dentro do httpd, o mod_cluster é implementado como um conjunto de módulos para httpd com mod_proxy habilitado. Grande parte da lógica vem do mod_proxy, por exemplo, mod_proxy_ajp fornece toda a lógica necessária para o mod_cluster AJP.
- Crie o arquivo de configuração do mod_cluster no diretório de configurações dos módulos do projeto.
vim mod_cluster_ajp.conf
- Adicione a configuração abaixo ao arquivo.
#--------------------------------------------
# Configuracoes do mod_cluster com ajp
#--------------------------------------------
ThreadLimit 150
StartServers 8
MinSpareThreads 5
MaxSpareThreads 20
MaxClients 2400
ThreadsPerChild 150
MaxRequestsPerChild 0
LoadModule slotmem_module modules/mod_slotmem.so
LoadModule manager_module modules/mod_manager.so
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule advertise_module modules/mod_advertise.so
#Ip do Apache
Listen 10.10.1.135:6666
<VirtualHost 10.10.1.135:6666>
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
#Ips dos servidores JBoss que se conectarão a este proxy
Allow from 10.10.1.129 10.10.1.130
</Directory>
KeepAliveTimeout 60
MaxKeepAliveRequests 0
ManagerBalancerName siga_homolo_cluster
ServerAdvertise off
#AdvertiseFrequency 5
EnableMCPMReceive
SetHandler mod_cluster-manager
Order deny,allow
#Deny from all
1. Ips das maquinas que terao acesso ao gerenciador do cluster
Allow from all
ProxyTimeout 120
- Salve e feche o arquivo
Para mais detalhes sobre a configuração do mod_cluster no Apache Httpd consulte a referência oficial em [# mod_deflate
O módulo mod_deflate provê o filtro de saída DEFLATE que permite que o envio do conteúdo que é provido pelo Apache seja compactado antes de ser enviado ao cliente pela rede. A compressão de conteúdo é uma operação relativamente custosa, então apenas há ganho em utilizá-la para conteúdos do tipo texto. A compressão de arquivos binários não é tão eficaz e onera o servidor desnecessariamente.
- Crie o arquivo de configuração do mod_deflate no diretório de configurações dos módulos do projeto.
vim mod_deflate.conf
- Adicione a configuração abaixo ao arquivo.
1. The DeflateBufferSize directive specifies the size
1. bytes of the fragments that zlib should compress at one time.
#DeflateBufferSize 8096
-
The DeflateCompressionLevel directive specifies what level of compression should be used,
-
the higher the value, the better the compression,
-
but the more CPU time is required to achieve this.
-
The value must between 1 (less compression) and 9 (more compression).
#DeflateCompressionLevel 1
-
The DeflateMemLevel directive specifies how much memory
-
should be used by zlib for compression (a value between 1 and 9).
#DeflateMemLevel 9
-
The DeflateWindowSize directive specifies the zlib
-
compression window size (a value between 1 and 15).
-
Generally, the higher the window size, the higher can the compression ratio be expected.
#DeflateWindowSize 15
#AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/x-javascript application/javascript text/x-js
SetOutputFilter DEFLATE
-
Don't compress images
-
by RH - don't compress audio/video/archive files either,
-
compress all the rest
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|pdf|png|mp.g?|bg?zip|rar|wmv)$ no-gzip dont-vary
-
Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
-
Properly handle old browsers that do not support compression
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
DeflateFilterNote Input instream
DeflateFilterNote Output outstream
DeflateFilterNote Ratio ratio
LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%) "%{User-agent}i"' deflate
CustomLog logs/deflate_log deflate
- Salve e feche o arquivo.
Para mais detalhes sobre a configuração do mod_deflate no Apache Httpd consulte a referência oficial em http://httpd.apache.org/docs/2.2/mod/mod_deflate.html
Esta configuração força inclusão dos HTTP Headers necessários para que o navegador (browser) armazene o conteúdo estático (imagens, css, js, etc) das páginas da aplicação no cache local da máquina cliente. Dessa maneira quando o cliente enviar uma nova requisição ao servidor terá que aguardar apenas pelo conteúdo dinâmico, pois o conteúdo estático já estará disponível localmente.
- Crie o arquivo de configuração do mod_deflate no diretório de configurações dos módulos do projeto.
vim mod_expires.conf
- Adicione a configuração abaixo ao arquivo.
#---------------------------------------------------------------
# Habilita cache de conteudos estaticos no cliente (navegador)
#---------------------------------------------------------------
ExpiresActive On
Header set Cache-Control "public, no-transform"
Header unset Last-Modified
#Expires Default "now"
#ExpiresByType text/html "now"
#ExpiresByType text/xml "now"
ExpiresByType text/css "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
ExpiresByType text/x-js "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType application/x-javascript "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/ico "access plus 1 month"
ExpiresByType image/icon "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 month"
#ExpiresByType video/x-flv "access plus 1 month"
#ExpiresByType video/quicktime "access plus 1 month"
#ExpiresByType application/x-shockwave-flash "access plus 1 month"
#ExpiresByType application/pdf "access plus 1 month"
#<FilesMatch ".(png|jpg|gif|css|flv|ico)$">
- Header set Cache-Control "max-age=290304000, public"
#
- Salve e feche o arquivo.
Para mais detalhes sobre a configuração do mod_expires no Apache Httpd consulte a referência oficial em [# mod_snmp
O módulo mod_snmp habilita a descoberta e monitoramento dos servidores Apache pelo JON
- Baixe os binários do conector pelo JON (JBoss Operation Network)
a). Efetue login no JON
-
b). Na Aba Administration no menu topo, clique no item Downloads localizado na janela lateral Configuration
c). Role a barra lateral até o fim e clique no link connector-apache.zip para baixar o conector do Apache.
- Descompacte o arquivo em um diretório acessível ao agente do JON
unzip connector-apache.zip
Obs: O diretório onde você descompactou o arquivo será referenciado como [Ex:APACHE_MODULE_ROOT=/opt/apache-connector
- Navegue até o diretório de armazenamento dos binários dos módulos do conector
-
`cd [4. Descompacte os binários referente ao seu Sistema Operacionsl / Versão do Apache (No caso do siga snmp_module-x64-linux-apache2.2.zip)
-
unzip snmp_module-x64-linux-apache2.2.zip
- Instale os módulos no Apache
-
`cd APACHE_MODULE_ROOT/apache-snmp/binaries/snmp_module-x64-linux-apache2.2\snmp_module_2.2\conf
-
cp module/* [APACHE_HOME](APACHE_MODULE_ROOT]/apache-snmp/binaries/)/modules
-
cp conf/* [-
mkdir APACHE_HOME/var`
- Crie o arquivo de configuração do mod_snmp no diretório de configurações do projeto.
cd /etc/httpd/conf.d/jboss
vim mod_snmp.conf
- Adicione o conteúdo abaixo ao arquivo
#---------------------------------------------------------------------
# Carrega os modulos de monitoramento do Apache com o Agente do JON
#---------------------------------------------------------------------
LoadModule snmpcommon_module modules/libsnmpcommon.so
LoadModule snmpagt_module modules/libsnmpmonagt.so
SNMPConf conf
SNMPVar var
- Salve e feche o arquivo
Para mais detalhes sobre a configuração do mod_snmp no Apache Httpd consulte a referência em [# mod_ssl
O módulo mod_ssl é um módulo que fornece forte criptografia para o Servidor Apache v1.3 e v2 através dos protocolos criptográficos Secure Sockets Layer (SSL v2/v3) e Transport Layer Security (TLS v1) com a ajuda do Open Source SSL / TLS kit de ferramentas OpenSSL.
=== Cinfigurações do mod_ssl
- Crie o arquivo de configuração do mod_ssl no diretório de configurações dos módulos do projeto.
vim mod_ssl.conf
- Adicione a configuração abaixo ao arquivo.
#--------------------------------
# Configuracoes mod_ssl
#-------------------------------
#LoadModule ssl_module modules/mod_ssl.so
Header set Alias %{SSL_CLIENT_S_DN_CN}s
Header set Certificate %{SSL_CLIENT_CERT}s
CustomLog /var/log/httpd/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x "%r" %b"
SSLRandomSeed startup file:/dev/urandom 1024
SSLRandomSeed connect file:/dev/urandom 1024
#Listen 10.13.1.133:443
<VirtualHost 10.13.1.133:443>
SSLEngine On
#Path para o arquivo que armazena a cadeia de certificados válidos
SSLCACertificateFile /etc/pki/tls/sigacert/ca.crt
#Path para a chave pública do certificado auto assinado
SSLCertificateFile /etc/pki/tls/sigacert/apache.crt
#Path para a chave privada do certificado auto assinado
SSLCertificateKeyFile /etc/pki/tls/sigacert/apache.key
#SSLOptions +FakeBasicAuth +StrictRequire +ExportCertData
SSLOptions +ExportCertData
#SSLUserName SSL_CLIENT_S_DN_CN
SSLProtocol All -SSLv2
SSLCipherSuite HIGH:MEDIUM:!aNULL:+MD5
#DocumentRoot "/var/www/html/ssl"
- IP do servidor Apache e porta segura para HTTPS
ServerName 10.13.1.133:443
<Location ~ "^(?:(?!siga/css|siga/javascript|siga/sigalibs|siga/imagens|siga/testes.action|autenticar.action|arquivoAutenticado.action).)*$"> # Obriga o cliente a apresentar um certificado
SSLRequireSSL
- Checa se o cliente apresentou um certificado válido
SSLVerifyClient require
- Checa até 10 níveis da cadeia de certificado
SSLVerifyDepth 10
- Regra do Siga para bloquear certificados que não tenham sido diretamente assinados pela AC CAIXA-JUS v1
#SSLRequire %{SSL_CLIENT_I_DN_CN} eq "AC CAIXA-JUS v1"
- Salve e feche o arquivo
*Importante: Os arquivos ca.crt, apache.crt e apache.key foram gerados e adicionados ao diretório /etc/pki/tls/sigacert (que também foi criado).
Para obter informações sobre como gerar um certificado auto assinado e sobre Autenticação via certificado digital consulte http://www.impetus.us/~rjmooney/projects/misc/clientcertauth.html
Para mais detalhes sobre a configuração do mod_ssl no Apache Httpd consulte a referência oficial em [# mod_rewrite
O módulo mod_rewrite é um módulo que usa uma engine de resscrita de URLs baseada em regras para reescrever as URLs requisitadas pelo cliente em tempo real. No escopo do projeto Siga, faz-se necessária a utilização do mod_rewrite para transformar as requisições feitas em HTTP para HTTPS.
- Crie o arquivo de configuração do mod_rewrite no diretório de configurações dos módulos do projeto.
vim mod_rewrite.conf
- Adicione a configuração abaixo ao arquivo.
#---------------------------------
# Configuracoes mod_rewrite
#---------------------------------
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^/siga(.*) https://%{HTTP_HOST}%{REQUEST_URI}
- Salve e feche o arquivo
Para mais detalhes sobre a configuração do mod_rewrite no Apache Httpd consulte a referência oficial em http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html
Basicamente está tudo pronto, basta fazer os includes dos arquivos de configurações criados no arquivo httpd.conf para que os mesmos sejam lidos e seus módulos carregados durante a inicialização do Apache.
- Abra o arquivo
httpd.conf
cd /etc/httpd/conf
vim httpd.conf
- Adicione a configuração abaixo ao final do arquivo.
#----------------------------------------------------------------
# Configuracoes do SIGA
#----------------------------------------------------------------
#---------------------------------------------------------------
#---------------------------------------------------------------
LimitRequestLine 8190
#------------------------------------
#------------------------------------
#------------------------------------
#------------------------------------
Include conf.d.altadisponibilidade/jboss/mod_cluster_ajp.conf
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
Include conf.d.altadisponibilidade/jboss/mod_snmp.conf
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
Include conf.d.altadisponibilidade/jboss/mod_expires.conf
#---------------------------------------------------------------
#---------------------------------------------------------------
Include conf.d.altadisponibilidade/jboss/mod_cache.conf
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
Include conf.d.altadisponibilidade/jboss/mod_deflate.conf
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
Include conf.d.altadisponibilidade/jboss/mod_ssl.conf
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
Include conf.d/jboss/mod_rewrite.conf
-
Salve e feche o arquivo
-
Reinicie o Apache com o comando abaixo
sudo service httpd restart
Comando para parar o Apache
sudo service httpd stop
Comando para inicializar o Apache
sudo service httpd start
Comando para reinicializar o Apache
sudo service httpd restart
Comando para verificar se as configurações possuem erros de sintaxe
sudo service httpd configtest
Para maiores informações acesse a documentação do Apache em [http://httpd.apache.org/docs/]