Я использую следующую конфигурацию для включения поддержки letsencrypt на всех vhosts:
ProxyPass /.well-known/acme-challenge !
Alias /.well-known/acme-challenge/ /var/www/letsencrypt/.well-known/acme-challenge/
<Directory "/var/www/letsencrypt/.well-known/acme-challenge/">
Options None
AllowOverride None
ForceType text/plain
RedirectMatch 404 "^(?!/\.well-known/acme-challenge/[\w-]{43}$)"
</Directory>
это отлично работает для всех хостов (в основном php или статических сайтов), кроме gitlab
Я использую этот конфиг: https://github.com/gitlabhq/gitlab-recipes/blob/master/web-server/apache/gitlab-ssl-apache24.conf
Я предполагаю, что эта часть конфигурации является проблемой:
<Location />
# New authorization commands for apache 2.4 and up
# http://httpd.apache.org/docs/2.4/upgrading.html#access
Require all granted
#Allow forwarding to gitlab-workhorse
ProxyPassReverse http://127.0.0.1:8181
ProxyPassReverse http://YOUR_SERVER_FQDN/
</Location>
но как лучше всего это решить?
Я думаю, здесь есть две проблемы:
DocumentRoot
что-то вне /var/www/letsencrypt
gitlab-workhorse
переписывает запросПсевдоним должен разрешить первую проблему, но это дополнение должно позволить GitLab не переписывать хорошо известный запрос. Согласно комментарию:
#Forward all requests to gitlab-workhorse except existing files like error documents
Gitlab уже написал правило для исключения, поэтому мы можем добавить к нему.
Добавьте следующую строку перед RewriteRule
RewriteCond %{REQUEST_URI} !^.*/\.well-known/.*$ [NC]
Это добавляет условие к НЕ перезаписывать запросы, которые содержат. Well-known. Перезагрузите Apache и проверьте.