ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Вопросы по add_header


  • To: nginx-ru@xxxxxxxxx
  • Subject: Re: Вопросы по add_header
  • From: Maksim Anfilatov <maksim@xxxxxxxxxx>
  • Date: Fri, 23 Nov 2012 00:02:40 +0400
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=woyager.ru; s=woyager; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=QoWZrJSVqRabsCzjCFPZthSe1JKapYako/dmV0AckuY=; b=ewIHJPQHyy9Gt3WwT4XvO//RwDaj83uMfv31na616FjsMbYK5n208VsjzjQKm5xpnk hpPW3dm8R4ikKV1g+kp7m6JBSnlBLLt1CA3yzlqNJxVpydH9GubaL6zutbVXn9gSh7hy +vQhF3vO5KzYux4j/Q3/tx8b6r2JdgAg69cIU=
  • In-reply-to: <22A273AC-2D4B-4C0E-ABBC-8AAABFA37EE5@gmail.com>
  • References: <CAGA13jTkx9i6pbuFUJDyLyPFu8sZ_BQuu0hr8m+yK4fFG4=a0w@mail.gmail.com> <CAJuKYoP-z-sHXA2W8XvZikcsv+=LJPfTa68KzyvoGLE8cnK2KQ@mail.gmail.com> <E944FD67-C7B5-439F-BA94-D3D09663C792@gmail.com> <CAJuKYoPYaUEHNTSKbrK7a7z6JwE=GmHxcBfTx_bOU3sfG=Ew4Q@mail.gmail.com> <22A273AC-2D4B-4C0E-ABBC-8AAABFA37EE5@gmail.com>

Доброй ночи.

Да, через internal_redirect (вариант 2). Для мелкой статики можно и $r->sendfile использовать. У меня в обоих случаях выставились заголовки.

Вариант 1 - без редиректов, через $r->sendfile.

sub test_vars{
        my $r=shift;
        my $file=$r->filename;
        my ($key,$value)=('key_rfom_var'.(int(rand(100))),'value from var'.(int(rand(100))));
        $r->header_out($key,$value);
        $r->send_http_header('text/text');
        $r->sendfile($file);
        return OK;
}

Вариант 2, с редиректом.

sub test_vars{
        my $r=shift;
        my $url="">
        $url =~ /\/test_vars\/(.*)$/;
        my $file=$1;
        my ($key,$value)=('key_rfom_var'.(int(rand(100))),'value from var'.(int(rand(100))));
        $r->header_out($key,$value);
        $r->internal_redirect("/stat_vars/$file");
        return OK;
}



С уважением.


22 ноября 2012 г., 23:35 пользователь Dmitry Zhiltsov <zaabjuda@xxxxxxxxx> написал:
Спасибо, понял!

Вопрос в догонку, чтобы отдавать статический контент с такими кастомными заголовками необходимо же делать internal rewrite?

On 22.11.2012, at 18:33, Maksim Anfilatov <maksim@xxxxxxxxxx> wrote:

Добрый день.

С HeaderMore я погорячился, у них прямо в доке But variables won't work in header keys due to performance considerations.

С $r->header_out

в pm

sub test_vars{
        my $r=shift;
        my ($key,$value)=('key_rfom_var'.(int(rand(100))),'value from var'.(int(rand(100))));
        $r->header_out($key,$value);
        $r->send_http_header('text/text');
        $r->print("$key\t$value\n");
        return OK;
}

в nginx.conf

        location /test_vars {
                perl charts::test_vars;
        }

ну и telnet localhost 80

GET /test_vars HTTP/1.1
Host: charts.test

HTTP/1.1 200 OK
Server: nginx/1.2.1
Date: Thu, 22 Nov 2012 14:31:17 GMT
Content-Type: text/text
Transfer-Encoding: chunked
Connection: keep-alive
key_rfom_var45: value from var5

1f
key_rfom_var45  value from var5

0

GET /test_vars HTTP/1.1
Host: charts.test

HTTP/1.1 200 OK
Server: nginx/1.2.1
Date: Thu, 22 Nov 2012 14:31:22 GMT
Content-Type: text/text
Transfer-Encoding: chunked
Connection: keep-alive
key_rfom_var77: value from var56

20
key_rfom_var77  value from var56

0

GET /test_vars HTTP/1.1
Host: charts.test

HTTP/1.1 200 OK
Server: nginx/1.2.1
Date: Thu, 22 Nov 2012 14:31:26 GMT
Content-Type: text/text
Transfer-Encoding: chunked
Connection: keep-alive
key_rfom_var29: value from var1

1f
key_rfom_var29  value from var1

0


С уважением.

22 ноября 2012 г., 18:16 пользователь Dmitry Zhiltsov <zaabjuda@xxxxxxxxx> написал:
А можно простенький пример?

On 22.11.2012, at 15:56, Maksim Anfilatov <maksim@xxxxxxxxxx> wrote:

Добрый день.

В документации сказано только, что значение может содержать переменные.

http://nginx.org/en/docs/http/ngx_http_headers_module.html
Adds the specified field to a response header provided that the response code equals 200, 204, 206, 301, 302, 303, 304, or 307. A value can contain variables.

Если переменные получаются из встроенного перла, то им же можно выставить кастомный header
http://nginx.org/en/docs/http/ngx_http_perl_module.html#methods $r->header_out

Можно еще попробовать HeadersMore http://wiki.nginx.org/HttpHeadersMoreModule.

С уважением.

22 ноября 2012 г., 15:32 пользователь Дмитрий Жильцов <zaabjuda@xxxxxxxxx> написал:
Здравствуйте.

Появился вопрос по работе директивы add_header

Сначала описание задачи.

Мне необходимо рандомно отдавать клиенту кастомные хидеры из списка

Есть файл в котором на каждой строчке записи вида

$key(имя хидера): $val (содержимое)

С помощью встроенного перла я получаю две переменные $key и $val , и пытаюсь их применить в директиве add_header

add_header $key $val

На клиенте получаю не то , что ожидал

Имя заголовка $key (те nginx не подставляет значение переменной а в имя заголовка подставляет само имя переменной )
Тело заголовка как и ожидалось содержит значение переменной $val

Вопрос - что я делаю не так?
Есть ли у nginx такой функционал?
Если нет то какое есть возможное решение?

Спасибо



_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.