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
, но эта директива вообще не имеет доступа к номеру порта (почему?).
Текущим рабочим решением было создание трех разных виртуальных хостов и жесткий код номера порта, но мне это не нравится.