我想在运行 ISPConfig 托管软件的服务器上安装 Mattermost。ISPConfig 有一种机制可以根据主机名自动获取和安装 Letsencrypt 证书。为此,Letsencrypt 需要访问/.well-known
目录(我猜)检查一些验证字符串。
我的 Mattermost 系统在端口 8065 上运行,并使用与反向代理在同一台服务器上运行的 ISPConfig 托管环境进行 SSL 卸载。
我按照https://docs.mattermost.com/configure/config-proxy-apache2.html对于未加密的连接,它工作正常。
但是,当我尝试获取 SSL 证书时,它就不再起作用了。我不太清楚发生了什么,但我猜想上面提到的代码正在将所有流量代理到我的 mattermost 系统,而它不应该将请求代理到 letsencrypt 所需的目录 ./well-known。
这听起来合理吗?如果合理,我该如何免除./well-known
目录的代理功能?
(对于专家来说,这可能相当容易,但我真的不知道从哪里开始 - 也许是因为我不完全理解这种反向代理是如何工作的,以及所有 apache 指令的确切含义......)
以下是我对标准 apache vhost 配置的当前修改的片段:
ServerAdmin [email protected]
ProxyPreserveHost On
RewriteEngine On
RewriteCond %{REQUEST_URI} /api/v[0-9]+/(users/)?websocket [NC]
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC,OR]
RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
RewriteRule .* ws://127.0.0.1:8065%{REQUEST_URI} [P,QSA,L]
ProxyPass /.well-known/ ! # <-- I inserted this line, but this does not seem to work...
<Location />
Require all granted
ProxyPass http://127.0.0.1:8065/
ProxyPassReverse http://127.0.0.1:8065/
ProxyPassReverseCookieDomain 127.0.0.1 mattermost.mydomain.com
</Location>
(上面的修改来自https://stackoverflow.com/questions/44651809/no-lets-encrypt-renewal-with-reverse-proxy-in-ispconfig3,但这似乎不起作用。可能是因为语句?但是如何在我的语句中不<Location />
指定整个目录?)/
/well-known
<Location>
关于如何解决我的问题有什么想法吗?
答案1
也许我放弃得太早了。我想我已经找到了解决问题的方法。除了 之外<Location>
,还有一个<LocationMatch>
适用于正则表达式的。我不是正则表达式专家,但经过一番折腾,我发现以下指令可以解决问题:
<LocationMatch "^(?:(?!\/\.well-known).)*$">
如果我的理解正确的话,这将匹配所有不以 开头的目录/.well-known
。