Переключите Apache proxypass conf в соответствии с переменной окружения - PullRequest
0 голосов
/ 02 июля 2019

Мне нужно что-то, что звучит тривиально, но я не мог понять, как это сделать: переключиться с прокси-сервера conf на другой в соответствии с переменной окружения (устанавливается изнутри conf или с ОС). У меня есть несколько условий, которые могут быть сложными здесь:

  • Я не могу использовать переменную из командной строки (-DPARAMATER_A)
  • Я не могу изменить используемый путь.

Я знаю, что могу выполнить некоторый условный проход, используя правила перезаписи, но если я не читаю неправильно, я не могу использовать переменную окружения в качестве триггера.
Я также знаю, что вы не можете использовать оператор , поскольку внутри такого оператора нельзя использовать прокси-пароль.
В конце концов, я попытался с помощью оператора (см. Ниже), но мне не удалось работать, если я не напишу

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 голосов
/ 12 июля 2019

В конце концов, оказалось, что 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

...