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

时间:2010-08-31 20:28:24

标签: apache2 apache2-module

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

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

另一种方法是读取配置文件并找到SSL VirtualHost侦听端口,但我也无法完成此操作。

似乎我错过了一些非常简单的方法来判断请求是否是通过https进行的,但我已经扫描了request_rec中的所有可用结构,但我没有看到任何明显的结构。

1 个答案:

答案 0 :(得分:3)

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

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