Escreva uma configuração do apache, com a condição baseada na versão do apache

2

Eu quero escrever uma configuração para um servidor apache que deve funcionar para o apache-2.2 e -2.4 sem alterações. Como há alguns novos módulos na v2.4 que precisam ser carregados e algumas diretivas alteradas, precisarei de algumas instruções condicionais. O que eu gostaria é algo ao longo das linhas de

<If ApacheVersion >= 2.4>
  LoadModule mod_only_in_2.4.so
</If>

mas ainda não encontrei a expressão correta. Alguém pode me apontar na direção certa?

Esclarecimento dos meus motivos: Estou desenvolvendo um servidor que desejo copiar apenas em um servidor e executar sem configuração adicional dependente do host. E como as máquinas podem ter uma versão do apache, quero uma configuração que funcione nos dois casos.

    
por mat 19.02.2014 / 14:58

3 respostas

2

Veja o que acabei fazendo: editei meu script de início para definir uma variável especificando a versão do apache

apache_version_string='$apache_bin -v|grep -oP "Apache/(\d\.\d)"'
if [[ $apache_version_string == "Apache/2.2" ]]; then
    server_flags=$server_flags" -DAPACHEv22"
 else
    if [[ $apache_version_string == "Apache/2.4" ]]; then
        server_flags=$server_flags" -DAPACHEv24"
    fi
fi

e na configuração do apache eu verifiquei essas definições

<IfDefine APACHEv24>
  LoadModule authz_core_module        /usr/lib/apache2/mod_authz_core.so
</IfDefine>
    
por 20.02.2014 / 10:21
5

Você deve verificar o módulo, não a versão do Apache.

Por exemplo:

<IfModule mod_authz_core.c>
Require all granted
</IfModule>

<IfModule !mod_authz_core.c>
Order deny,allow
Allow from all
</IfModule>

Note que você não pode adivinhar com antecedência se alguém tem uma versão específica do Apache; cabe ao administrador de sistema certificar-se de que os módulos corretos estão sendo carregados. Como o desenvolvedor, tudo o que você realmente precisa se preocupar é que você está fornecendo as diretivas corretas, dependendo de quais módulos estão disponíveis.

Como sysadmin, você terá que manter configurações diferentes para o Apache 2.2 e 2.4; não há como evitar isso. Felizmente, todo sistema de gerenciamento de configurações torna isso relativamente fácil, e se você ainda não estiver usando esse sistema, você deve estar.

    
por 19.02.2014 / 15:04
3

Se mod_version for carregado, que deve estar disponível por padrão (embora não seja carregado por padrão) no Apache 2.2 e 2.4, você pode usar o <IfVersion> para verificar a versão do Apache (e somente do Apache):

<IfVersion >= 2.3>
    # this happens only in versions greater or
    # equal 2.3.0.
</IfVersion>

Exemplo retirado da documentação.

    
por 15.12.2015 / 10:52