Apache 反向代理设置(有一些例外)

Apache 反向代理设置(有一些例外)

我想在运行 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

相关内容