绑定Apache信息
在apache的使用中,如果是一个apache代理服务器,并且使用的证书的话, 我们不可避免的需要将从前端和证书中的信息传递给后端处理。 一般情况下,我们都是将这些信息绑定在http头中,cookie项中,这样后端比较容易处理。
幸运的是,apache为我们提供了这么一个可选函数,可以任何的一个模块中获取 你需要的信息。 这个可选函数是在模块 mod_nw_ssl 中定义。 >APR_REGISTER_OPTIONAL_FN(ssl_var_lookup);
可选函数
[apache 可选函数原理]()
可选函数实现
声明
APR_DECLARE_OPTIONAL_FN(char *, ssl_var_lookup,
(apr_pool_t *, server_rec *,
conn_rec *, request_rec *,
char *));
实现
char *ssl_var_lookup(apr_pool_t *p, server_rec *s, conn_rec *c, request_rec *r, char *var)
注册
APR_REGISTER_OPTIONAL_FN(ssl_var_lookup);
获取
static APR_OPTIONAL_FN_TYPE(ssl_var_lookup) *pfn_ssl_lookup = NULL; pfn_ssl_lookup = APR_RETRIEVE_OPTIONAL_FN(ssl_var_lookup);
调用
if (pfn_ssl_lookup) {
server_rec *s = r->server ? r->server : c->base_server;
value = pfn_ssl_lookup(pool, s, c, r, var);
}
信息绑定原理
可查询信息
- http 头中的信息
- ssl 的参数,和对应使用的用户证书的各项内容。
- 连接 socket 的各项参数- 格式化的各种时间
- 保存在 r->notes 中的的环境变量- 如何找不到 key 对应的 value,则返回空字符串。
如何防止假冒参数
? 如果用户服务器里面有一个与网关相同的参数,你会怎么处理?
- 用下划线替换假冒URL参数名的第一个字符