Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Возврат данных из подзапр оса
- To: nginx-ru@xxxxxxxxx
- Subject: Возврат данных из подзапр оса
- From: "Igor A. Valcov" <viaprog@xxxxxxxxx>
- Date: Tue, 2 Nov 2010 18:10:02 +0300
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:received:date:message-id :subject:from:to:content-type:content-transfer-encoding; bh=M7t9TzLxvOFjzeQqTunf6fPcatV+u2nA33jkBz9FEuI=; b=aBgqZLgTfaoVaPTJhRTkcjqPDr4hlLFhuqNle0rYuQ9LGS14XIIkgz2IZLuyompcUe GQcpnHwMKqFOyd/QJ1XNo4oj2kLgHjpwoPCBYizsdMNWCfcijU+ZQUORMOhmbouXMxDn IV7sK0jCnOgOChcSBsT+DyQrMlkohWS76sqy0=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type :content-transfer-encoding; b=Etsipqa1Ky+6Kf0uVQ3d92ffC/ta3JOVxpNMUiW+J9b70dmSFrgiJLCHLkjg3eyBc9 TFp1vfwJMCboKmR5KOyf+YdpKm9IM4jwMyqRYCx220K0cPhC0rOQsE55axvekLGOSS2E idcv6F53/69P18yx0BejElUT+u9ymJ6ne2obo=
Здравствуйте!
Вопрос знатокам внутренностей nginx. Хочу разобраться с сабжевым механизмом.
Пишу модуль, в котором есть такой обработчик запроса
ngx_int_t ngx_http_subrequest_handler(ngx_http_request_t *r)
{
...
ngx_http_post_subrequest_t *sub_cb = ngx_pcalloc(r->pool,
sizeof(ngx_http_post_subrequest_t));
if (sub_cb == NULL)
return NGX_HTTP_INTERNAL_SERVER_ERROR;
sub_cb->handler = subrequest_completed;
sub_cb->data = NULL; /* FIXME */
ngx_str_t uri;
ngx_str_set(&uri, "/fetch");
ngx_http_request_t *req = NULL;
rc = ngx_http_subrequest(r, &uri, NULL, &req, sub_cb,
NGX_HTTP_SUBREQUEST_WAITED);
if (rc != NGX_OK)
return NGX_HTTP_INTERNAL_SERVER_ERROR;
return NGX_AGAIN;
}
Который назначается так:
...
clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
clcf->handler = ngx_http_subrequest_handler;
...
Этот подзапрос отправляется на
location /fetch {
internal;
proxy_pass http://host.ru:port;
}
После приёма данных proxy-модулём вызывается обработчик subrequest_completed
ngx_int_t subrequest_completed(ngx_http_request_t *r, void *data, ngx_int_t rc)
{
ngx_buf_t *buf;
ngx_chain_t out;
ngx_buf_t *resp = NULL;
if(r->out)
resp = r->out->buf;
if(r->upstream)
resp = &r->upstream->buffer;
....
// ngx_http_request_t *pr = r->parent;
// pr->write_event_handler = write_event_handler;
return NGX_OK;
}
Вопрос такой: как идеологически правильным способом получить и
обработать данные подзапроса на уровне родительского запроса? Откуда
это делать? И как правильно завершить подзапрос и родитиельский
запрос?
Кратко, задача такая: нужно изъять полученные mod_proxy данные (и
заголовки), которые он пытается отправить в out, на основе этих данных
сгенерировать совершенно другие данные (и заголовки) и отправиь в out
уже их.
Спасибо.
--
Igor A. Valcov
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru
|