首页 > 解决方案 > 根据环境变量切换 Apache proxypass conf

问题描述

我需要一些听起来微不足道的东西,但我不知道如何做到这一点:根据环境变量(从 conf 中设置或从操作系统中设置)从 proxypass conf 切换到另一个。我有一些可能在这里很棘手的条件:

我知道我可以使用重写规则进行一些条件传递,但除非我读错了,否则我不能使用环境变量作为触发器。
我也知道你不能使用 < If> 语句,因为不能在这样的语句中使用 proxypass。
最终,我尝试了一个 < IfDefine> 语句(见下文),但无法工作,除非我写一个

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>

任何想法?

标签: apacheproxyenvironment-variablesmod-proxy

解决方案


最终,mode_rewrite 绝对可以处理环境变量。它必须以这种棘手的方式使用:

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 值


推荐阅读