Apache-2.4
帶有來自 LocationMatch 的字元串替換的 Apache ProxyHTMLURLMap
我正在嘗試建構一個 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>
按預期工作,除了每次啟動時的虛假警告。