带有 OS 环境变量的 Apache 配置 If 语句
Apache config If statement with OS environment variable
如何根据 OS 级环境变量(printenv
将包含 ENV=qa、ENV=prod 等)有条件地设置代理?像这样:
<If "${ENV} == 'qa'">
ProxyPass "/" "www.google-qa.com"
</If>
<If "${ENV} == 'prod'">
ProxyPass "/" "www.google-production.com"
</If>
像上面这样的东西我得到:Cannot parse condition clause: Parse error near '$'
有两种替代语法可以代替:
<If "'${ENV}' == 'qa'">
或
<If "reqenv('ENV') == 'qa'">
但是 ProxyPass 不能封装在 <If>
中,主要是因为这是一个针对每个请求的检查,并且发生在稍后的处理过程中,然后当 ProxyPass 必须执行时。
通过 mod_rewrite 进行代理并在 RewriteCond
中检查 %{ENV:ENV} 可能更直接
RewriteEngine on
RewriteCond %{ENV:ENV} =qa
RewriteRule ^/(.*) http://www.google-qa.com/ [P]
RewriteCond %{ENV:ENV} =prod
RewriteRule ^/(.*) http://www.google-production.com/ [P]
如何根据 OS 级环境变量(printenv
将包含 ENV=qa、ENV=prod 等)有条件地设置代理?像这样:
<If "${ENV} == 'qa'">
ProxyPass "/" "www.google-qa.com"
</If>
<If "${ENV} == 'prod'">
ProxyPass "/" "www.google-production.com"
</If>
像上面这样的东西我得到:Cannot parse condition clause: Parse error near '$'
有两种替代语法可以代替:
<If "'${ENV}' == 'qa'">
或
<If "reqenv('ENV') == 'qa'">
但是 ProxyPass 不能封装在 <If>
中,主要是因为这是一个针对每个请求的检查,并且发生在稍后的处理过程中,然后当 ProxyPass 必须执行时。
通过 mod_rewrite 进行代理并在 RewriteCond
RewriteEngine on
RewriteCond %{ENV:ENV} =qa
RewriteRule ^/(.*) http://www.google-qa.com/ [P]
RewriteCond %{ENV:ENV} =prod
RewriteRule ^/(.*) http://www.google-production.com/ [P]