[英]How to use environment variable from mod_rewrite for interpolate proxypass in httpd.conf
我正在使用apache 2.4並嘗試在conf文件中使用環境變量進行代理傳遞。 有一個線程[ Apache proxypass使用帶有插值的可變URL ]討論這個問題:
RewriteEngine on
RewriteMap lowercase int:tolower
#This sets the variable to env:
RewriteRule ^ - [E=SERVER_NAME:${lowercase:%{SERVER_NAME}}]
#Now interpolate makes variables available for proxypass & proxypassreverse:
ProxyPassInterpolateEnv On
ProxyPass / ajp://${SERVER_NAME}:8009/ interpolate
ProxyPassReverse / ajp://${SERVER_NAME}:8009/ interpolate
但是當我自己嘗試此操作時,出現“ AH00111:配置變量$ {SERVER_NAME}未定義”錯誤。 這意味着Apache2.4將$ {SERVER_NAME}視為配置變量,而不是環境變量。
我也嘗試將mod_rewrite語法用於變量,像這樣,
ProxyPass / ajp://%{ENV:SERVER_NAME}:8009/ interpolate
ProxyPassReverse / ajp://%{ENV:SERVER_NAME}:8009/ interpolate
但是%{ENV:SERVER_NAME}被視為純文本字符串,並且由於不是有效的URL傳遞而創建了一個錯誤。
在服務器啟動時,使用“ Define”塊定義配置變量。 我想要的是在運行時使用mod_rewrite更改SERVER_NAME。 我不能使用mod_rewrite [P]參數,因為我還需要使ProxyPassReverse塊與變量一起工作。 mod_rewrite無法處理重寫響應,因此無法模仿ProxyPassReverse的功能。
關於如何在插值proxypass conf指令中使用環境變量的任何想法?
事實證明,使用以下語法,即使有警告,Apache仍可以加載並正常工作:
ProxyPassReverse / ajp://${SERVER_NAME}:8009/ interpolate
在此郵件列表線程中發現了此問題。 討論是關於另一個問題的,但是他們提到了這個問題,並討論了向ProxyPass等添加第二種插值語法的想法。但是,我還沒有發現錯誤報告,並且從Apache 2.4.10開始, mod_proxy代碼仍然僅支持${varname}
語法,該語法與整體httpd.conf插值沖突。
我還沒有找到一種方法來禁用那些特定的警告,但是如果您願意接受這些警告,那么Apache應該仍然可以為您工作。
一個警告是,如果在加載Apache時存在一個具有相同名稱的系統環境變量,它將覆蓋您嘗試在運行時插入的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.