回答
收藏
分享
举报
第三方负载均衡模块如何获取get请求参数?
提问于2021-03-21 09:49

浏览 3.6k

比如在 ngx_http_upstream_ip_hash_module.c中如何获取get请求的参数?

如 http://localhost/mytest?a=22.123213&b=33.12324&C=24.12311&d=36.2334


因为我需要仿照iphash负载均衡模块开发第三方负载均衡模块,

而该模块需要拿到请求中的数据来选择上游服务器。

已修改于2023-03-17 02:13



写下您的回答
发表回答
全部回答(1)

按点赞数排序

按时间排序

$arg_a就可以取到22.123213

赞同

2

回复举报

回答于2021-03-21 20:42



回复陶辉
回复
think_654回复了

查看资料发现大家都是在nginx的配置文件中使用$取变量,但是在nginx源代码中也可以用这种方式获取变量吗?比如在 ngx_http_upstream_ip_hash_module.c 文件的ngx_http_upstream_get_ip_hash_peer 这个函数中使用$arg_a就可以取到吗?为什么呢?

0

回复举报

回答于2021-03-24 03:31



回复think_654
回复

nginx.conf与C语言是完全不同的编程语言。如果你想用C语言写Nginx模块,建议先看下《深入理解Nginx:模块开发与架构解析》第15章

0

回复举报

回答于2021-03-24 06:46



回复陶辉
回复
think_654回复了

老师你好,看了书本第15章并看了源码和一些资料

对于请求:http://localhost/mytest?a=22.123213  

应该可以用如下方法拿到参数值,其中参数值在a->data中(类型为u_char*)

ngx_str_t arg_a = ngx_string("arg_a");

ngx_http_variable_value_t *a;
//r表示当前请求 if(ngx_http_variable_argument(r,a,arg_a) != NGX_OK){
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,"get arg \"%V\" failed.", &arg_a);
return NGX_ERROR;
}


解析参数的nginx中的函数定义(在ngx_http_variables.c中):

static ngx_int_t
ngx_http_variable_content_length(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);


你看是这样吗?

0

回复举报

回答于2021-03-24 12:45



回复think_654
回复
更多回复
提问者
think_654
这家伙很懒还未留下介绍~
0
文章
1
问答
0
粉丝
相关问答

proxy_intercept_errors on; error_page 里去掉 404. 另外注意proxy_intercept_errors, error_page范围,可以 写在server 里,如果写在location 里只对location 生效。

点赞 0
浏览 4.3k