浏览 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负载均衡模块开发第三方负载均衡模块,
而该模块需要拿到请求中的数据来选择上游服务器。

按点赞数排序
按时间排序
$arg_a就可以取到22.123213
2
回答于2021-03-21 20:42
查看资料发现大家都是在nginx的配置文件中使用$取变量,但是在nginx源代码中也可以用这种方式获取变量吗?比如在 ngx_http_upstream_ip_hash_module.c 文件的ngx_http_upstream_get_ip_hash_peer 这个函数中使用$arg_a就可以取到吗?为什么呢?
0
回答于2021-03-24 03:31
老师你好,看了书本第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
proxy_intercept_errors on; error_page 里去掉 404. 另外注意proxy_intercept_errors, error_page范围,可以 写在server 里,如果写在location 里只对location 生效。
微信公众号
加入微信群