我使用以下配置在所有 vhosts 上启用 letsencrypt 支持:
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>
这对于除 gitlab 之外的所有主机(主要是 php 或静态站点)都适用
我正在使用这个配置: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>
但解决这个问题的最佳方法是什么?
答案1
我认为这里有两个问题:
- 这
DocumentRoot
是外面的东西/var/www/letsencrypt
gitlab-workhorse
正在重写请求
别名应该可以解决第一个问题,但这个添加应该允许 .well-known 请求不被 GitLab 重写。根据评论:
#Forward all requests to gitlab-workhorse except existing files like error documents
Gitlab 已经编写了排除规则,因此我们可以对其进行添加。
在之前添加以下行RewriteRule
RewriteCond %{REQUEST_URI} !^.*/\.well-known/.*$ [NC]
这添加了一个条件,即不重写包含 .well-known 的请求。重新启动 Apache 并测试。