【问题标题】:How can my Apache 2 module tell if it is being called via an SSL request?我的 Apache 2 模块如何判断它是否是通过 SSL 请求调用的?
【发布时间】:2011-04-06 11:48:09
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: apache2 apache2-module


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-24
      • 2013-04-18
      • 2019-03-29
      • 2017-12-12
      • 2013-02-21
      • 2010-10-15
      相关资源
      最近更新 更多