
我想在運行 ISPConfig 託管軟體的伺服器上安裝 Mattermost。 ISPConfig 有一個根據主機名稱自動取得和安裝 Letsencrypt 憑證的機制。為此,Letsencrypt 需要存取該/.well-known
目錄(我猜)檢查一些驗證字串。
我的 Mattermost 系統在連接埠 8065 上運行,並使用與反向代理在同一伺服器上運行的 ISPConfig 託管環境來進行 SSL 卸載。
我正在按照以下說明進行操作https://docs.mattermost.com/configure/config-proxy-apache2.html這對於未加密的連線運作良好。
但一旦我嘗試獲取 SSL 證書,這就不再起作用了。我不完全確定發生了什麼,但我猜上面提到的程式碼正在代理所有流量到我的最重要的系統,而它不應該代理到目錄./well-known 的請求,這是LetsEncrypt 的東西所需要的。
聽起來合理嗎?如果是這樣,我怎樣才能使該./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
.