根据环境变量切换Apache proxypass conf

时间:2019-07-02 13:58:22

标签: apache proxy environment-variables mod-proxy

我需要一些听起来很琐碎的东西,但我找不到解决方法:根据环境变量(从conf内设置或从os设置),从proxypass conf切换到另一个。 我有一些情况可能在这里很棘手:

  • 我不能在命令行(-DPARAMATER_A)中使用变量
  • 我无法更改使用的路径。

我知道我可以使用重写规则进行一些条件传递,但是除非我读错了,否则不能将环境变量用作触发器。
我也知道您不能使用语句,因为这样的语句不能使用proxypass。
最终,我尝试使用语句(请参见下文),但是除非我写了

,否则就无法正常工作
Define PATH_A_ACTIVATED true

但是相反的方法不起作用(无论值如何,它似乎都已定义):

Define PATH_A_ACTIVATED false

因此,到目前为止,我无法执行此操作。

这是我最近(无效)的尝试,尝试从环境变量中查询一个值并将其与Define相结合:

SetEnv PARAMATER_A false

<If "! -T reqenv('PARAMATER_A')">
  Define PATH_A_ACTIVATED true
</If>
<Else>
  UnDefine PATH_A_ACTIVATED
</Else>


<IfDefine PATH_A_ACTIVATED>
    ProxyPass "/someapp" "http://dv00001.someplace.fr/someapp"
    ProxyPassReverse "/someapp" "http://dv00001.someplace.fr/someapp"
</IfDefine>
<IfDefine !PATH_A_ACTIVATED>
    ProxyPass "/someapp/domain1" "http://dv00001.someotherplace.fr/someapp"
    ProxyPassReverse "/someapp/domain1" "http://dv00001.someotherplace.fr/someapp"
    ProxyPass "/someapp/domain2" "http://dv00001.someplace.fr/someapp"
    ProxyPassReverse "/someapp/domain2" "http://dv00001.someplace.fr/someapp"
</IfDefine>

有什么主意吗?

1 个答案:

答案 0 :(得分:0)

最终,最终mode_rewrite肯定可以处理环境变量。 它必须以这种-tricky-方式使用:

RewriteRule .* - [E=TEST_ACTIVATED:false]

# ====== TEST  ==================
RewriteCond "%{ENV:TEST_ACTIVATED}" "true"
RewriteCond "%{REQUEST_URI}" "/some/path"
RewriteRule "^/some/path/(.*)" http://some.vm/some/path/$1 [P]
# ====== HORS TEST ==============
RewriteCond "%{ENV:TEST_ACTIVATED}" "false"
RewriteCond "%{REQUEST_URI}" "/some/path"
RewriteRule "^/some/path/(.*)" http://another.vm/some/path/$1 [P]

现在,您只需要切换TEST_ACTIVATED值