Apache-2.4

帶有來自 LocationMatch 的字元串替換的 Apache ProxyHTMLURLMap

  • June 4, 2020

我正在嘗試建構一個 Apache 反向代理,以使一組伺服器可以通過單點訪問進行訪問。這些伺服器都在埠 3000 上提供了一個 Web 管理界面,我打算將它們都顯示為反向代理上的目錄。介面包含本地連結,當然必須重寫這些連結才能轉到代理上正確伺服器的子目錄。

我可以為每個伺服器單獨使用這樣的配置片段來實現所需的行為:

<Location /testadmin-warsaw/>
       ProxyPass http://warsaw.example.com:3000/
       ProxyPassReverse /
       ProxyHTMLEnable  On
       ProxyHTMLURLMap  / /testadmin-warsaw/ L
       RequestHeader    unset Accept-Encoding
</Location>

由於隨著伺服器的來來去去,這變得相當乏味且容易出錯,因此我的目標是動態配置。根據 Apache 文件,以下應該可以工作:

<LocationMatch "^/testadmin-(?<OFFICENAME>\w+)/(.*)$">
       ProxyPassMatch   http://$1.example.com:3000/$2
       ProxyPassReverse /
       ProxyHTMLEnable  On
       ProxyHTMLInterp  On
       ProxyHTMLURLMap  / /testadmin-${env:MATCH_OFFICENAME|unknown}/ VL
       RequestHeader    unset Accept-Encoding
</LocationMatch>

<LocationMatch>將環境變數設置MATCH_OFFICENAME為目錄的辦公室名稱部分,ProxyHTMLURLMap並將此名稱插入到重寫連結的適當位置。

但是,當我測試該配置時,最初指向的連結會/other/page.html被重寫,/testadmin-unknown/other/page.html而不是/testadmin-warsaw/other/page.html按預期進行。換句話說,ProxyHTMLURLMap就像MATCH_OFFICENAME未設置環境變數一樣。

如果我省略該env:部分並/testadmin-${MATCH_OFFICENAME}/按照 to 模式放置,Apache 會記錄一個警告:“AH00111:未定義配置變數 ${MATCH_OFFICENAME}”。

我的錯在哪裡?

沒有 的語法env:是正確的。根據Apache Bug #58467AH00111,它產生的警告消息是虛假的。

配置:

<LocationMatch "^/testadmin-(?<OFFICENAME>\w+)/(.*)$">
       ProxyPassMatch   http://$1.example.com:3000/$2
       ProxyPassReverse /
       ProxyHTMLEnable  On
       ProxyHTMLInterp  On
       ProxyHTMLURLMap  / /testadmin-${MATCH_OFFICENAME|unknown}/ VL
       RequestHeader    unset Accept-Encoding
</LocationMatch>

按預期工作,除了每次啟動時的虛假警告。

引用自:https://serverfault.com/questions/1019185