我的Apache2模块如何判断是否通过SSL请求调用它?

我的Apache2模块如何判断是否通过SSL请求调用它?,apache2,apache2-module,Apache2,Apache2 Module,我有一个模块需要在其负载中返回一个引用URI。如果通过SSL连接调用,我需要构建一个具有https前缀的URI。我可以很容易地从请求中获取端口号,但问题是用户可能已经为SSL选择了任何端口(事实上,这个特定的Apache实例总是以非标准SSL端口开始) 请求结构中所有已解析的URI都已删除http/https前缀。我正在考虑使用r->server->defn_name字段,它实际上包含请求虚拟服务器的conf文件。如果我看到它以httpd-ssl.conf结尾,我可以猜这是一个ssl连接。仍然感

我有一个模块需要在其负载中返回一个引用URI。如果通过SSL连接调用,我需要构建一个具有https前缀的URI。我可以很容易地从请求中获取端口号,但问题是用户可能已经为SSL选择了任何端口(事实上,这个特定的Apache实例总是以非标准SSL端口开始)

请求结构中所有已解析的URI都已删除http/https前缀。我正在考虑使用r->server->defn_name字段,它实际上包含请求虚拟服务器的conf文件。如果我看到它以httpd-ssl.conf结尾,我可以猜这是一个ssl连接。仍然感觉像是黑客攻击,实际上用户也可以将该conf文件命名为其他名称,这将打破这种方法

另一种方法是读取配置文件并找到SSL VirtualHost侦听端口,但我也无法实现这一点


似乎我缺少了一些非常简单的方法来判断请求是否是通过https发出的,但是我已经扫描了请求记录中所有可用的结构,没有看到任何明显的东西。

在httpd.h头文件中定义了一个很好的函数,它将为您提供请求的方案:

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