Pedido de diretivas do Apache: global, pré-VHost ou em blocos do diretório

3

Estou configurando meu primeiro servidor virtual do zero (nome do provedor omitido, mas é um 'droplet'). Eu tenho usado o WHM por um tempo e sinto que estou bastante familiarizado com ele.

Especificamente, é uma máquina Debian 8, rodando o Apache 2.4 (ele usa apache.conf não httpd.conf )

De qualquer forma, estou tendo dificuldade em descobrir onde colocar o que considero diretivas globais (elas devem se aplicar a todos os sites) que estão disponíveis em todos os contextos.

Exemplos triviais seriam definir um conjunto de caracteres padrão ou ativar mod_deflate para ativar o gzip.

Mais especificamente, escrevi regras de reescrita para lidar com referenciadores indesejados (referenciadores de spam, mas não preciso de conselhos para que eu esteja muito familiarizado com o problema).

Aqui está basicamente o que eu tenho:

<IfModule mod_rewrite.c>
  RewriteEngine on
  Options FollowSymlinks
  RewriteCond %{HTTP_REFERER} (badreferer1\..*) [NC,OR]
  RewriteCond %{HTTP_REFERER} (crappy-referer2\..*) [NC,OR]
  RewriteCond %{HTTP_REFERER} (webiste-i-hate3\..*) [NC]
  RewriteRule ^(.*)$ http://%1 [R=301,L]
</IfModule>

Tenho certeza de que meu RegEx está correto (desejo redirecionar todos os protocolos, todos os subdomínios e todos os TLDs que contêm essas cadeias de caracteres).

Entendo que essas regras funcionariam se fossem adicionadas a cada bloco de diretiva vhost, mas isso seria muito redundante.

Eu estaria bem aplicando essas regras globalmente, mas adicioná-las ao topo do meu apache.conf não está funcionando

Preciso envolvê-los em um bloco <Directory> ?

Posso colocá-los em <Directory /> ?

Todos os meus sites estão em /var/www/html , preciso aplicar essas regras no <Directory /var/www/html> ?

O que estou perdendo (não em termos de código, já que esse fragmento é incompleto, mas em termos de ordenar diretivas e saber onde colocá-las)?

Gostaria de manter meu arquivo .conf o mais conciso possível e evitar usar .htaccess (e não AllowOverrides por motivos de desempenho), então estou tentando descobrir como fazer isso funcionar em apache.conf (colocá-los em um arquivo chamado via include é aceitável, pois já existem vários em uso).

    
por adam-asdf 26.12.2015 / 22:58

1 resposta

2

Com relação a regras de reescrita, elas são permitidas na configuração principal do servidor, mas não afetam o VirtualHosts. Um pouco oculto no manual , é mencionado de maneira um tanto casual:

Note that rewrite configurations are not inherited by virtual hosts. This means that you need to have a RewriteEngine on directive for each virtual host in which you wish to use rewrite rules.

Portanto, um conjunto universal de regras em um arquivo de inclusão como parte de cada VirtualHost parece ser o caminho a seguir.

Em geral, no entanto: o manual lista todas as diretivas onde é permitido, que é sempre um ou mais de:

  • configuração do servidor
    Isso significa que a diretiva pode ser usada nos arquivos de configuração do servidor (por exemplo, httpd.conf), mas não em qualquer contêiner <VirtualHost> ou <Directory> . Não é permitido em arquivos .htaccess.

  • host virtual
    Este contexto significa que a diretiva pode aparecer dentro de <VirtualHost> contêineres nos arquivos de configuração do servidor.

  • diretório
    Uma diretiva marcada como sendo válida neste contexto pode ser usada dentro dos contêineres <Directory>, <Location>, <Files>, <If>, e <Proxy> nos arquivos de configuração do servidor, sujeitos às restrições descritas nas Seções de Configuração.

  • .htaccess
    Se uma diretiva for válida nesse contexto, isso significa que ela pode aparecer dentro de arquivos .htaccess por diretório. Ele pode não ser processado, embora dependa das substituições atualmente ativas.

Diretivas na configuração do servidor principal se aplicam a todo o servidor,
diretivas dentro de um <VirtualHost> se aplicam somente a esse host virtual
e há um capítulo inteiro sobre como todas as seções se unem: link

    
por 27.12.2015 / 00:30