RewriteRule. Получить номер физического порта в конфигурации Apache

2 У меня есть следующая конфигурация:

---443-> Load-Balancer-1 ---80> Apache-Proxy ---8080> Tomcat
---443-> Load-Balancer-2 ---81> Apache-Proxy ---8081> Tomcat
---443-> Load-Balancer-3 ---82> Apache-Proxy ---8082> Tomcat

На сервере Apache имеется несколько записей через разные порты 80, 81, 81. Для каждого порта Apache имеется порт прослушивания Tomcat. Вот упрощенная конфигурация:

  <VirtualHost *:80 *:81 *:82>
     RewriteRule ^/(.*) ://localhost:80<xx>/$1 [P,L]
  </VirtualHost>

В конфигурации выше вместо <xx> должен быть использован физический номер порта Apache. В этом случае 80, 81 или 82.

Я пытался с помощью %{SERVER_PORT}, но это никогда не физический порт. Если UseCanonicalName Off, это порт балансировщика нагрузки (443 в моем примере). Если UseCanonicalName OnЭто один из портов, настроенных в конфигурации Apache. В моем случае это всегда было 82.

UseCanonicalPhysicalPort On|Off Директива была теоретически разработана для решения этой проблемы, но, похоже, она недостаточно гибка для конфигурации виртуального хоста.

http://httpd.apache.org/docs/current/mod/core.html

Я пытался получить доступ к переменной CGI SERVER_PORT как %{ENV:SERVER_PORT}, но его не было.

Я попытался обойти проблему с помощью SetEnvIf, но эта директива вообще не имеет доступа к номеру порта (почему?).

Текущим рабочим решением было создание трех разных виртуальных хостов и жесткий код номера порта, но мне это не нравится.

0 ответов

Другие вопросы по тегам