При попытке заставить Let's Encrypt Certbot работать на локальном сервере, на котором размещен контент с обратным проксированием, я не могу заставить локальное исключение работать внутри Location
блок. httpd.conf
фрагмент:
SSLProxyEngine on
<Location "/">
ProxyPass "https://internal.host/"
ProxyPassReverse "https://internal.host/"
</Location>
Include /etc/apache2/vhosts.d/01_acme.include
Размещение 01_acme.include
файл выше или ниже Location
блок не действует.
В 01_acme.include
файл:
<Location /.well-known/acme-challenge/>
ProxyPass "!"
Alias /run/acme/.well-known/acme-challenge
</Location>
Я поместил один текстовый файл в этот каталог с именем date
. Попытка получить этот файл приводит к бесконечному перенаправлению 301 на date/index.html/index.html/...
пока не будет достигнут предел перенаправления клиента. Журналы показывают, что это сгенерировано на внешнем сервере, а серверная часть никогда не получает запросов.
Если я заменю блок Location автономными директивами, он будет работать так, как ожидалось:
Alias /.well-known/acme-challenge /run/acme/.well-known/acme-challenge
ProxyPass /.well-known/acme-challenge !
Согласно ProxyPass В документации этот метод определения исключения должен работать - он очень хорошо согласуется с предоставленным примером конфигурации в конце этого раздела. Это просто сломано, или я что-то пропустил?
Перенаправления могут быть основной причиной, но я не могу найти никаких директив перенаправления или перезаписи в этой области, которые могут выдавать 301, и единственное упоминание index.html в .htaccess
(его нет) или файлы конфигурации - это индекс каталога, который я пытался явно отключить с помощью Options -Indexes
безрезультатно.
Вам не хватает косой черты в конце Alias
. Завершающие косые черты должны совпадать.
<Location /.well-known/acme-challenge/>
ProxyPass "!"
Alias /run/acme/.well-known/acme-challenge/
</Location>