Global Apache Alias, ignorando hosts virtuais

5

Eu tenho uma entrada global

Alias /.well-known/acme-challenge /var/www/letsencrypt/.well-known/acme-challenge/

na configuração do meu apache, fora de qualquer host virtual. Desta forma, o Alias acima é eficaz para todos os hosts virtuais. Infelizmente, ainda existem anfitriões virtuais em que isto não funciona como pretendido, e. devido a redirecionamentos, requisitos de autenticação etc.

Existe uma maneira de dizer ao apache para considerar esse alias antes mesmo de ler a configuração do host virtual em particular?

    
por Joachim Breitner 19.12.2015 / 20:18

3 respostas

4

Você pode tentar adicionar isso antes de todo o seu host virtual:

Alias /.well-known/acme-challenge/ /var/www/letsencrypt/.well-known/acme-challenge/

#Bypass Auth
<Directory /var/www/letsencrypt/.well-known/acme-challenge/>
Satisfy any
</Directory>

#Redirect before other rewrite rules
RewriteCond %{REQUEST_URI} /\.well\-known/acme\-challenge/
RewriteRule (.*) /.well-known/acme-challenge/$1 [L,QSA]
    
por 20.12.2015 / 01:11
1

De acordo com a documentação do Apache 2.4, você tem estas opções:

There are two basic types of containers. Most containers are evaluated for each request. The enclosed directives are applied only for those requests that match the containers. The <IfDefine>, <IfModule>, and <IfVersion> containers, on the other hand, are evaluated only at server startup and restart. If their conditions are true at startup, then the enclosed directives will apply to all requests. If the conditions are not true, the enclosed directives will be ignored.

Pode ser que você possa tentar usar um dos contêineres mencionados acima e adicionar o alias que você precisa para ser globalmente para todas as solicitações. Veja os detalhes aqui: link .

    
por 20.12.2015 / 01:08
1

Eu me deparei com a sua pergunta com o mesmo problema de alias apache do letsencrypt acme. Depois de ler a documentação do apache, ainda não entendi porque o alias global não funciona como esperado (de acordo com a documentação que deveria).

De qualquer forma, aqui está uma solução alternativa que usa o RedirectMatch (que, de acordo com a documentação, é avaliada antes do alias). Requer um host adicional e um arquivo de configuração global:

  1. Crie um (sub) domínio / host adicional que só atenda a solicitações acme, digamos "acme.mydomain.tld"
  2. Criar (e habilitar) uma configuração global que redireciona todos os pedidos acme para esse host, excluindo o próprio host do redirecionamento:

    <If "%{HTTP_HOST} != 'acme.mydomain.tld'">
        RedirectMatch "^/.well-known/(.*)$" "http://acme.mydomain.tld/.well-known/$1" 
    </If>
    

Isso funciona para todos os meus VirtualHosts que tiveram problemas com a antiga abordagem de alias.

    
por 17.01.2018 / 12:14