2013-10-29 62 views
4

我使用apache 2.4並嘗試在conf文件中使用環境變量進行代理傳遞。有一個線程[Apache proxypass using a variable URL with interpolate]說起這個:如何使用mod_rewrite的環境變量在httpd.conf中插入proxypass

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」塊定義。我想要的是讓SERVER_NAME在運行時使用mod_rewrite進行更改。 我無法使用mod_rewrite [P]參數,因爲我需要讓ProxyPassReverse塊也與變量一起工作。 mod_rewrite無法處理重寫響應,因此無法模仿ProxyPassReverse的功能。

有關如何在插值proxypass conf指令中使用環境變量的任何想法?

回答

2

原來的Apache仍然會加載和做工精細,即使有警告,使用此語法:

ProxyPassReverse/ajp://${SERVER_NAME}:8009/ interpolate

這個問題在this mailing list thread被確定。討論是關於另一個問題,但他們提到了這個問題,並討論了向ProxyPass添加第二個插值語法的想法等。但是,我還沒有找到一個錯誤報告,並且它看起來像Apache 2.4.10,mod_proxy code仍然僅支持${varname}語法,這與總體httpd.conf插值衝突。

我還沒有找到一種方法來禁用這些特定的警告,但是如果您願意忍受這些警告,Apache應該仍然適合您。

一個警告是,如果在加載Apache時存在一個與系統環境變量同名的系統環境變量,它將覆蓋您在運行時插入的值。

+0

也很重要,它似乎設置位置塊內的環境變量不起作用,你需要把它放在虛擬主機塊 – user230910