Есть ли предпочтительный метод обнаружения HTTP или HTTPS во входящем запросе к балансировщику нагрузки F5? Мы пытаемся определить безопасное и небезопасное с помощью iRule и передать соответствующий флаг заголовка моим веб-серверам.
Вот что у нас есть (непроверено):
when HTTP_REQUEST_SEND {
clientside {
if {[TCP::local_port] == 443} {
HTTP::header replace HTTP_X_FORWARDED_PROTO "https"
}
else {
HTTP::header replace HTTP_X_FORWARDED_PROTO "http"
}
}
}
Как видите, мы используем if {[TCP::local_port] == 443} { ... }
для обнаружения SSL, но это кажется неуклюжим с портом, жестко закодированным в правиле. Есть ли способ лучше?
Возможно осмотр: SSL::mode
, HTTP:uri
, или что-то другое?
Вы хотите определить, использует ли соединение клиентский профиль SSL. Страница DevCentral для ПРОФИЛЬ :: существует показывает, как это сделать:
when CLIENT_ACCEPTED {
if { [PROFILE::exists clientssl] == 1} {
log local0. "client SSL profile enabled on virtual server"
}
}
Оливер