Configurando o arquivo httpd.conf

Uma das funções do arquivo httpd.conf é determinar quais módulos do Apache serão carregados. Quando maior for o número de módulos carregados, mais memória, mais recursos de CPU e, consequentemente, mais lenta será a execução do Apache. Por isso, é imprante saber para que serve cada módulo, se um determinado módulo está sendo útil na operação dele.

Abra o aquivo httpd.conf e habilite os módulos desejados:

$ sudo nano /usr/local/apache2/conf/httpd.conf
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule cache_module modules/mod_cache.so
LoadModule cache_disk_module modules/mod_cache_disk.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule socache_memcache_module modules/mod_socache_memcache.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule filter_module modules/mod_filter.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule mime_module modules/mod_mime.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule version_module modules/mod_version.so
LoadModule remoteip_module modules/mod_remoteip.so
LoadModule session_module modules/mod_session.so
LoadModule session_cookie_module modules/mod_session_cookie.so
LoadModule session_dbd_module modules/mod_session_dbd.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule unixd_module modules/mod_unixd.so
#LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
#LoadModule info_module modules/mod_info.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule dir_module modules/mod_dir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so

#Server-pool management (MPM specific)
Include conf/extra/httpd-mpm.conf

# Real-time info on requests and configuration
Include conf/extra/httpd-info.conf

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf          

Aviso!

Carregue os módulos mod_info e mod_status somente quando o servidor Apache estiver em modo de desenvolvimento e de teste, porque eles facilitam a invasão por hackers.


A diretiva AllowOverride configurada para none e a diretiva Require para all denied, negam o acesso a todo o sistema de arquivos do servidor.

<Directory />
  AllowOverride none
  Require all denied
</Directory>

A partir desse ponto, é necessário utilizar a diretiva <Directory> para permitir o acesso ao conteúdo de algum diretório específico.


Configurando Expires

Os Expires informam para o navegador o tempo que ele deve guardar o conteúdo acessado. Isso evita que o navegador peça várias vezes determinado conteúdo em cada acesso.

$ sudo nano /usr/local/apache2/conf/httpd.conf

Exemplo:

Nesse exemplo, a configuração dos expires tem início na linha 12 e termina na 23.

  #
  # DocumentRoot: The directory out of which you will serve your
  # documents. By default, all requests are taken from this directory, but
  # symbolic links and aliases may be used to point to other locations.
  #
  DocumentRoot "/usr/local/apache2/htdocs"
  <Directory "/usr/local/apache2/htdocs">
      Options Indexes FollowSymLinks
      AllowOverride None
      Require all granted
  
      ExpiresActive On
      ExpiresByType text/html "access plus 1 day"
      ExpiresByType text/css "access plus 1 day"
      ExpiresByType text/javascript "access plus 1 day"
      ExpiresByType image/gif "access plus 1 month"
      ExpiresByType image/jpg "access plus 1 month"
      ExpiresByType image/jpeg "access 1 month"
      ExpiresByType image/png "access plus 1 month"
      ExpiresByType application/pdf "access 1 month"
      ExpiresByType application/x-shockwave-flash "acess 1 month"
      ExpiresByType image/x-icon "access 1 month"
      ExpiresDefault "access 1 month"
  </Directory>

EnableMMAP faz o mapeamento de memória, porém somente deve ser habilitado se o disco for local. Se for um disco de rede não deve ser habilitado.

EnableMMAP on

EnableSendfile é uma função do kernel do Linux que torna possível um arquivo ser lido diretamente do disco e enviado para um socket (porta 80). Este mecanismo evita operações separadas de leitura, envio e alocações de buffer, por isso, economiza muitos ciclos de CPU.

EnableSendfile on

Incluir as seguintes configurações:


# Server-pool management (MPM specific)
Include conf/extra/httpd-mpm.conf
Include conf/extra/httpd-deflate.conf
Include conf/extra/httpd-cache.conf

A função deflate faz o servidor comprimir o conteúdo antes de enviar. Ao receber, o navegador deve descompactar. Esse processo economiza banda do servidor, porém consome recurso de CPU.

Para criar o arquivo de configuração do deflate:

$ sudo nano /usr/local/apache2/conf/extra/httpd-deflate.conf
  AddOutputFilterByType DEFLATE text/html text/plain text/xml
  <Location />
  SetOutputFilter DEFLATE
  
  # Netscape 4.x has some problems...
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  
  #Netscape 4.06-4.08 have some more problems
  BrowserMatch ^Mozilla/4\.0[678] no-gzip
  
  #MSIE masquerades as Netscape, but it is fine
  BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
  
  # Don't compress images
  SetEnvIfNoCase Request_URI \
  \.(?:gif|jpe?g|png)$ no-gzip dont-vary
  
  # Make sure proxies don't deliver the wrong content
  Header append Vary User-Agent env=!dont-vary
  </Location>

Para criar o arquivo de configuração do cache:

$ sudo nano /usr/local/apache2/conf/extra/httpd-cache.conf
CacheRoot "/var/cache/apache/"
CacheEnable disk /
CacheDirLevels 1
CacheDirLength 2

Reinicializar o Apache:

$ sudo /usr/local/apache2/bin/apachectl restart
$ sudo /usr/local/apache2/bin/apachectl status

Comando para verificar os módulos carregados:

$ sudo /usr/local/apache2/bin/apachectl -M

Configurando Expires

Os Expires informam para o navegador o tempo que ele deve guardar o conteúdo acessado. Isso evita que o navegador peça várias vezes determinado conteúdo em cada acesso.

$ sudo nano /usr/local/apache2/conf/httpd.conf

Exemplo:

Nesse exemplo, a configuração dos expires tem início na linha 12 e termina na 23.

  #
  # DocumentRoot: The directory out of which you will serve your
  # documents. By default, all requests are taken from this directory, but
  # symbolic links and aliases may be used to point to other locations.
  #
  DocumentRoot "/usr/local/apache2/htdocs"
  <Directory "/usr/local/apache2/htdocs">
      Options Indexes FollowSymLinks
      AllowOverride None
      Require all granted
  
      ExpiresActive On
      ExpiresByType text/html "access plus 1 day"
      ExpiresByType text/css "access plus 1 day"
      ExpiresByType text/javascript "access plus 1 day"
      ExpiresByType image/gif "access plus 1 month"
      ExpiresByType image/jpg "access plus 1 month"
      ExpiresByType image/jpeg "access 1 month"
      ExpiresByType image/png "access plus 1 month"
      ExpiresByType application/pdf "access 1 month"
      ExpiresByType application/x-shockwave-flash "acess 1 month"
      ExpiresByType image/x-icon "access 1 month"
      ExpiresDefault "access 1 month"
  </Directory>

EnableMMAP faz o mapeamento de memória, porém somente deve ser habilitado se o disco for local. Se for um disco de rede não deve ser habilitado.

EnableMMAP on

EnableSendfile é uma função do kernel do Linux que torna possível um arquivo ser lido diretamente do disco e enviado para um socket (porta 80). Este mecanismo evita operações separadas de leitura, envio e alocações de buffer, por isso, economiza muitos ciclos de CPU.

EnableSendfile on

Incluir as seguintes configurações:


# Server-pool management (MPM specific)
Include conf/extra/httpd-mpm.conf
Include conf/extra/httpd-deflate.conf
Include conf/extra/httpd-cache.conf

A função deflate faz o servidor comprimir o conteúdo antes de enviar. Ao receber, o navegador deve descompactar. Esse processo economiza banda do servidor, porém consome recurso de CPU.

Para criar o arquivo de configuração do deflate:

$ sudo nano /usr/local/apache2/conf/extra/httpd-deflate.conf
  AddOutputFilterByType DEFLATE text/html text/plain text/xml
  <Location />
  SetOutputFilter DEFLATE
  
  # Netscape 4.x has some problems...
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  
  #Netscape 4.06-4.08 have some more problems
  BrowserMatch ^Mozilla/4\.0[678] no-gzip
  
  #MSIE masquerades as Netscape, but it is fine
  BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
  
  # Don't compress images
  SetEnvIfNoCase Request_URI \
  \.(?:gif|jpe?g|png)$ no-gzip dont-vary
  
  # Make sure proxies don't deliver the wrong content
  Header append Vary User-Agent env=!dont-vary
  </Location>

Para criar o arquivo de configuração do cache:

$ sudo nano /usr/local/apache2/conf/extra/httpd-cache.conf
CacheRoot "/var/cache/apache/"
CacheEnable disk /
CacheDirLevels 1
CacheDirLength 2

Reinicializar o Apache:

$ sudo /usr/local/apache2/bin/apachectl restart
$ sudo /usr/local/apache2/bin/apachectl status

Comando para verificar os módulos carregados:

$ sudo /usr/local/apache2/bin/apachectl -M