Skip to content

Apache_HTTP_ Server_ Configuracoes

Markenson edited this page Apr 14, 2015 · 3 revisions

Configurações do Servidor Apache.

Introdução

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.

Descrção do Ambiente

  • 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

O arquivo httpd.conf

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

O diretório /etc/httpd/conf.d

Todo arquivo de configuração (.conf) do apache quando inserido no diretório /etc/httpd/conf.d/ é carregado automaticamente.

Apache no projeto Siga

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.

Mãos à obra

Para facilitar o entendimento, o diretório de instalação do apache será referenciado como [Ex: APACHE_HOME=/etc/httpd/`

Criando o diretório de configurações dos módulos do JBoss

  1. Mova-se para o diretório de instalação do apache (APACHE_HOME):
  • cd /etc/httpd/
  1. Crie o diretório onde serão arazenados os arquivos de configuração dos módulos do projeto:
  • mkdir conf.d/jboss
  1. Mova-se para o diretório de configuração dos módulos do projeto
  • cd conf.d/jboss

Configurando os módulos do projeto

mod_cache

Overview

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.

Configurando o mod_cache

  1. 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
  1. Ainda como root digite o comando abaixo para montar o novo ponto de montagem
  • mount -a
  1. 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`

  2. 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
  1. Cache proxied url's CacheEnable disk /siga/sigalibs CacheEnable disk /sigaex/sigalibs CacheEnable disk /sigawf/sigalibs

  2. Evita o cache do Header Set-Cookie

  3. jsessionid (resposavel pela persistencia de sessao do cliente http) CacheIgnoreHeaders Set-Cookie

  4. Introduced in Apache Httpd 2.2.14 #CacheIgnoreURLSessionIdentifiers jsessionid JSESSIONID

  5. I/O operations are proportionally more expensive for small objects, so they

  6. should be the ones included in cache. Avoid including large files.

  7. in bytes CacheMinFileSize 1 CacheMaxFileSize 1000000

  8. How many directories to have in cache CacheDirLevels 5

  9. Length of directory names in the cache CacheDirLength 3

  10. 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

  1. Salve e feche o arquivo.

  2. 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

  1. Salve e feche o arquivo.

  2. 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

Overview

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.

Configfuração mod_cluster

  1. 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
  1. 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

Define o tempo para timeout de uma requisicao

ProxyTimeout 120

  1. 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

Overview

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.

Configuração do mod_deflate

  1. Crie o arquivo de configuração do mod_deflate no diretório de configurações dos módulos do projeto.
  • vim mod_deflate.conf
  1. 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
  1. The DeflateCompressionLevel directive specifies what level of compression should be used,

  2. the higher the value, the better the compression,

  3. but the more CPU time is required to achieve this.

  4. The value must between 1 (less compression) and 9 (more compression). #DeflateCompressionLevel 1

  5. The DeflateMemLevel directive specifies how much memory

  6. should be used by zlib for compression (a value between 1 and 9). #DeflateMemLevel 9

  7. The DeflateWindowSize directive specifies the zlib

  8. compression window size (a value between 1 and 15).

  9. 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

  10. Don't compress images

  11. by RH - don't compress audio/video/archive files either,

  12. compress all the rest SetEnvIfNoCase Request_URI .(?:gif|jpe?g|pdf|png|mp.g?|bg?zip|rar|wmv)$ no-gzip dont-vary

  13. Make sure proxies don't deliver the wrong content Header append Vary User-Agent env=!dont-vary

  14. 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

  1. 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

mod_expires

Overview

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.

Configuração do mod_expires

  1. Crie o arquivo de configuração do mod_deflate no diretório de configurações dos módulos do projeto.
  • vim mod_expires.conf
  1. 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)$">

  1. Header set Cache-Control "max-age=290304000, public" #
  1. 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

Overview

O módulo mod_snmp habilita a descoberta e monitoramento dos servidores Apache pelo JON

Configuração do mod_snmp

  1. Baixe os binários do conector pelo JON (JBoss Operation Network)

a). Efetue login no JON

  • http://picasso:7080

    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.

  1. 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

  1. 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

  1. 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`

  1. 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
  1. 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

  1. 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

Overview

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

  1. Crie o arquivo de configuração do mod_ssl no diretório de configurações dos módulos do projeto.
  • vim mod_ssl.conf
  1. Adicione a configuração abaixo ao arquivo.
#-------------------------------- # Configuracoes mod_ssl #-------------------------------

Se for rodar na instância padrão não precisa inicializar o módulo

#LoadModule ssl_module modules/mod_ssl.so

Informacoes enviadas no Request Header via mod_header

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

Se for rodar na instância padrão não precisa adicionar o Listen na porta 443

#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"
  1. 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

  1. Checa se o cliente apresentou um certificado válido SSLVerifyClient require
  2. Checa até 10 níveis da cadeia de certificado SSLVerifyDepth 10
  3. 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"
  1. 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

Overview

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.

Cinfigurações do mod_rewrite

  1. Crie o arquivo de configuração do mod_rewrite no diretório de configurações dos módulos do projeto.
  • vim mod_rewrite.conf
  1. Adicione a configuração abaixo ao arquivo.
#--------------------------------- # Configuracoes mod_rewrite #--------------------------------- RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^/siga(.*) https://%{HTTP_HOST}%{REQUEST_URI}
  1. 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

Finalizando a configuração do Apache

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.

Incluindo os arquivos de configuração dos módulos no arquivo de inicialização do apache httd.conf

  1. Abra o arquivo httpd.conf
  • cd /etc/httpd/conf
  • vim httpd.conf
  1. Adicione a configuração abaixo ao final do arquivo.
#---------------------------------------------------------------- # Configuracoes do SIGA #----------------------------------------------------------------

#---------------------------------------------------------------

Configuracao Quantidade de Memoria permitida por requisicao

#---------------------------------------------------------------

This directive sets the number of bytes that will be allowed

on the HTTP request-line.

The LimitRequestLine directive allows the server administrator to set

the limit on the allowed size of a client's HTTP request-line.

Since the request-line consists of the HTTP method, URI, and protocol

version, the LimitRequestLine directive places a restriction on the length

of a request-URI allowed for a request on the server.

A server needs this value to be large enough to hold any of its resource

names, including any information that might be passed in the query part

of a GET request.

This directive gives the server administrator greater control over abnormal

client request behavior, which may be useful for avoiding some forms of

denial-of-service attacks.

For example:

LimitRequestLine 4094

Under normal conditions, the value should not be changed from the default.

Also, you can't set this higher than 8190 without modifying the source

and rebuilding.

LimitRequestLine 8190

#------------------------------------

Configuracao mod_proxy

#------------------------------------

Include conf.d/jboss/mod_proxy_ajp.conf

#------------------------------------

Configuracao mod_cluster

#------------------------------------ Include conf.d.altadisponibilidade/jboss/mod_cluster_ajp.conf

#-----------------------------------------------------------------------

Configuracao mod_snmp (modulos de monitoramento do Apache com o Agente do JON)

#----------------------------------------------------------------------- Include conf.d.altadisponibilidade/jboss/mod_snmp.conf

#-----------------------------------------------------------------------

Configuracao mod_expires (cache de conteudo estatico no browser do cliente)

#----------------------------------------------------------------------- Include conf.d.altadisponibilidade/jboss/mod_expires.conf

#---------------------------------------------------------------

Configuracao mod_cache (cache de conteudo estatico no apache)

#--------------------------------------------------------------- Include conf.d.altadisponibilidade/jboss/mod_cache.conf

#-----------------------------------------------------------------------

Configuracao mod_deflate (compactacao do conteudo estatico no servidor)

#----------------------------------------------------------------------- Include conf.d.altadisponibilidade/jboss/mod_deflate.conf

#-----------------------------------------------------------------------

Configuracao mod_ssl (autenticacao via certificado digital)

#----------------------------------------------------------------------- Include conf.d.altadisponibilidade/jboss/mod_ssl.conf

#-----------------------------------------------------------------------

Configuracao mod_rewrite (Redirecionamento automatico de HTTP para HTTPS)

#----------------------------------------------------------------------- Include conf.d/jboss/mod_rewrite.conf

  1. Salve e feche o arquivo

  2. Reinicie o Apache com o comando abaixo

  • sudo service httpd restart

Comandos básicos do Apache

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/]

Clone this wiki locally