Welcome! Log In Create A New Profile

Advanced

Re: порядок прохождения http-фаз сервера

Maxim Dounin
March 19, 2013 06:56AM
Hello!

On Mon, Mar 18, 2013 at 10:49:59PM +0400, Oleg wrote:

> On Mon, Mar 18, 2013 at 08:00:55PM +0400, Maxim Dounin wrote:
> > Hello!
> >
> > > А http-redirect может только модуль фазы NGX_HTTP_CONTENT_PHASE слать или с
> > > фазы NGX_HTTP_ACCESS_PHASE тоже можно слать перенаправления?
> >
> > Можно из любой фазы (но может требовать дополнительных
> > приседаний).
>
> Так. Попробовал по-быстрому сделать перенаправление. Никаких приседаний не
> заметил, по крайней мере для фазы NGX_HTTP_ACCESS_PHASE. Может, чего-то не
> учёл, конечно, но сделал в лоб:
>
> h = r->headers_out.location;
> if ( h == NULL ) {
> h = ngx_list_push(&r->headers_out.headers);
> if ( h == NULL )
> return NGX_ERROR;
>
> h->key.data = "Location";
> h->key.len = sizeof("Location") - 1;
>
> r->headers_out.location = h;
> }
> h->value.data = "http://ya.ru";
> h->value.len = sizeof("http://ya.ru") - 1;
> h->hash = 1;
>
> r->headers_out.status = NGX_HTTP_TEMPORARY_REDIRECT;
> ngx_http_send_header(r);
>
> return NGX_OK;
>
> Работает нормально.

Так, насколько я понимаю, будет мусор на выходе - сначала ответ
302 без тела, а потом ответ на исходный запрос. Посмотрите
telnet'ом на ответ.

Для access-фазы проще всего добавить заголовок location, и вернуть
NGX_HTTP_TEMPORARY_REDIRECT (BTW, хочется возвращать именно 307?).
Собственно, так же, как и для content-фазы, ибо там есть
специальная обработка NGX_HTTP_*. Как-то так (выдержка из
ngx_http_static_module.c):

ngx_http_clear_location(r);

r->headers_out.location = ngx_palloc(r->pool, sizeof(ngx_table_elt_t));
if (r->headers_out.location == NULL) {
return NGX_ERROR;
}

r->headers_out.location->value.len = len;
r->headers_out.location->value.data = location;

return NGX_HTTP_TEMPORARY_REDIRECT;

--
Maxim Dounin
http://nginx.org/en/donation.html

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

порядок прохождения http-фаз сервера

Oleg March 18, 2013 09:30AM

Re: порядок прохождения http-фаз сервера

Maxim Dounin March 18, 2013 09:42AM

Re: порядок прохождения http-фаз сервера

Oleg March 18, 2013 10:40AM

Re: порядок прохождения http-фаз сервера

Maxim Dounin March 18, 2013 10:54AM

Re: порядок прохождения http-фаз сервера

Oleg March 18, 2013 11:42AM

Re: порядок прохождения http-фаз сервера

Maxim Dounin March 18, 2013 12:02PM

Re: порядок прохождения http-фаз сервера

Oleg March 18, 2013 12:44PM

Re: порядок прохождения http-фаз сервера

Oleg March 18, 2013 02:54PM

Re: порядок прохождения http-фаз сервера

Maxim Dounin March 19, 2013 06:56AM

Re: порядок прохождения http-фаз сервера

Oleg March 19, 2013 07:30AM

Re: порядок прохождения http-фаз сервера

Maxim Dounin March 19, 2013 08:44AM

Re: порядок прохождения http-фаз сервера

Oleg March 19, 2013 09:16AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 119
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready