我正在编写一个自定义nginx模块,在其中使用过滤器进行一些处理。过滤器的设置如下所示:
static ngx_int_t ngx_http_mymodule_init(ngx_conf_t *cf)
{
ngx_http_next_header_filter = ngx_http_top_header_filter;
ngx_http_top_header_filter = ngx_http_mymodule_header_filter;
ngx_http_next_body_filter = ngx_http_top_body_filter;
ngx_http_top_body_filter = ngx_http_mymodule_body_filter;
return NGX_OK;
}
我正在此body
过滤器中处理一些逻辑,并且在特定条件下,我想在客户端的浏览器中执行到localhost的重定向。过滤器主体代码如下所示:
static ngx_int_t
ngx_http_mymodule_body_filter(ngx_http_request_t *r, ngx_chain_t *in)
{
ctx = ngx_http_get_module_ctx(r, ngx_http_mymodule_module);
if (ctx == NULL) {
return ngx_http_next_body_filter(r, in);
}
bool success = __my_custom_logic(r);
if (success == false) {
ngx_http_set_ctx(r, NULL, ngx_http_mymodule_module);
// Do the redirect here! How?
// Setting the Location header and changing r->headers_out.status to 302
// just returns an empty HTTP 200 to the client instead...
}
ngx_http_set_ctx(r, NULL, ngx_http_mymodule_module);
return ngx_http_send_special(r, NGX_HTTP_LAST);
}
我尝试过的事情:
-将Location标头和headers_out.status设置为302,但它会向客户端返回空响应
-设置headers_out.location,但仍返回空响应
-调用ngx_http_send_header(r),但这会返回NGX_ERROR响应
我该如何重定向到客户端?