Как мой модуль Apache 2 может определить, вызывается ли он через запрос SSL? - PullRequest
2 голосов
/ 01 сентября 2010

У меня есть модуль, который должен возвращать ссылочный URI в своей полезной нагрузке.При вызове через соединение SSL мне нужно создать URI с префиксом https.Я легко могу получить номер порта из запроса, но проблема в том, что пользователь мог выбрать любой порт для SSL (и фактически этот конкретный экземпляр Apache всегда начинается с нестандартного порта SSL).

У всех проанализированных URI в структуре запроса уже удален префикс http / https.Я собираюсь прибегнуть к полю r-> server-> defn_name, в котором на самом деле есть файл conf для виртуального сервера запроса.Если я увижу, что это заканчивается httpd-ssl.conf, я могу предположить, что это SSL-соединение.Все еще ощущается как хак, и на самом деле пользователь может также назвать этот файл conf как-нибудь еще, что нарушило бы этот подход.

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

Кажется, я упускаю какой-то очень простой способ узнать, был ли запрос сделан через https, но я просканировал все структуры, доступные в request_rec, и я не вижу ничего очевидного.

1 Ответ

3 голосов
/ 14 ноября 2010

В заголовочном файле httpd.h определена хорошая функция, которая даст вам схему запроса:

if (apr_strnatcmp(ap_http_scheme(r), "https") == 0) {
    ssl = TRUE;    
} else {
    ssl = FALSE;
}
...