Я использую nginx в качестве обратного прокси-сервера и пытаюсь написать модуль nginx, который будет обрабатывать входящие запросы, и если ему нравятся определенные HTTP-заголовки, присутствующие в запросе, nginx позволит запросу достичь защищенного сервера.(за прокси-сервером nginx).Теперь я успешно реализовал обработку заголовка, но я застрял в выяснении, как перенаправить запрос на сервер.До сих пор я изучал подзапросы, но ни один из кодов, которые я пробовал (или скопировал из существующих модулей, таких как ngx_http_addition_filter_module
!), Не работает.Либо я застреваю в цикле, где запускается более 100 подзапросов, либо ничего не происходит вообще.Код, который я пытался использовать:
static ngx_int_t ngx_http_my_own_handler(ngx_http_request_t *r)
{
// some request processing here
// ...
// now issue the sub-request
ngx_http_request_t *sr;
ngx_http_post_subrequest_t *ps;
ps = ngx_palloc(r->pool, sizeof(ngx_http_post_subrequest_t));
if (ps == NULL) {
return NGX_ERROR;
}
ps->handler = ngx_http_foo_subrequest_done;
ps->data = "foo";
// re-use the request URI to try to forward it
return ngx_http_subrequest(r, &r->uri, &r->args, &sr, ps, NGX_HTTP_SUBREQUEST_CLONE);
}
А обработчик ngx_http_foo_subrequest_done
выглядит следующим образом:
ngx_int_t ngx_http_foo_subrequest_done(ngx_http_request_t *r, void *data, ngx_int_t rc)
{
char *msg = (char *) data;
ngx_log_error(NGX_LOG_INFO, r->connection->log, 0, "done subrequest r:%p msg:%s rc:%i", r, msg, rc);
return rc;
}
Пожалуйста, сообщите, что я делаю неправильно!