Apache: Прокси на основе суффиксов URL

Моя команда записала внутренний сервер BI, который генерирует отчеты HTML в ссылках такой как /users/daily или /updates/questions.

Сервер записан в Grails, и он работает отлично с классической установкой Apache-Tomcat:

ProxyPass         /     http://localhost:8080/ nocanon
ProxyPassReverse  /     http://localhost:8080/

enter image description here

Так

https://example.com/users/daily

Проксируется внутренне к

http://localhost:8080/users/daily

И подаваемый от сервлета Tomcat.

Сервер успешен, и я хотел бы развернуть его трижды, к 3 различным системам, которые отличает суффикс URL (/dev, /stg, /prod):

enter image description here

Значение этого https://example.com/dev/users/daily будет проксирован от http://localhost:8080/users/daily, и https://example.com/prod/users/daily будет подаваться от http://localhost:8082/users/daily.

Я попробовал некоторый Apache RewriteRules и ProxyPass правила, но не мог найти рабочую комбинацию.

Как я могу сделать основанную на суффиксе внутреннюю маршрутизацию в Apache это с рабочими внутренними ссылками?

3
задан 11 August 2014 в 11:05
1 ответ

Вы можете сделать это с помощью

<Location /dev>
  RewriteEngine on
  RewriteRule  ^/dev/(.*)  /$1
  ProxyPass         /  http://localhost:8080/ nocanon
  ProxyPassReverse  /  http://localhost:8080/
</Location>

и так далее. Это даст вам разные прокси для разных URL, и удалит ведущие /dev, /staging или /prod из URL.

Но есть проблема: ссылки в HTML, возвращаемые из Tomcat, будут иметь базу URL из /, а не из /dev и т.д. Чтобы добавить префикс обратно в HTML, вам придется использовать mod_proxy_html или эквивалент, чтобы разобрать HTML, изменить его и собрать обратно. Это может сработать, но за это придется заплатить; неправильно сформированный HTML может быть искажен; вам придется переписывать URL в CSS и Javascript тоже; и Javascript может оказаться неправильным.

Другой вариант, который может быть проще: создать новые имена хостов в DNS: dev.biserver.example.com, staging.biserver.example.com, и prod.biserver.example.com. Тогда переписывание URL пройдёт, и вы сможете делать всё с виртуальными хостами, например:

<VirtualHost *:443>
  ServerName dev.biserver.example.com
  ProxyPass         /  http://localhost:8080/ nocanon
  ProxyPassReverse  /  http://localhost:8080/
</VirtualHost>

и т.д.

.
4
ответ дан 3 December 2019 в 06:06

Теги

Похожие вопросы