簡體   English   中英

如何使用mod_rewrite中的環境變量在httpd.conf中插值proxypass

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM