Welcome! Log In Create A New Profile

Advanced

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

Maksim Anfilatov
November 22, 2012 03:04PM
Доброй ночи.

Да, через 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=$r->uri;
$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@gmail.com>написал:

> Спасибо, понял!
>
> Вопрос в догонку, чтобы отдавать статический контент с такими кастомными
> заголовками необходимо же делать internal rewrite?
>
> On 22.11.2012, at 18:33, Maksim Anfilatov <maksim@woyager.ru> 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@gmail.com>написал:
>
>> А можно простенький пример?
>>
>> On 22.11.2012, at 15:56, Maksim Anfilatov <maksim@woyager.ru> 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@gmail.com
>> > написал:
>>
>>> Здравствуйте.
>>>
>>> Появился вопрос по работе директивы add_header
>>>
>>> Сначала описание задачи.
>>>
>>> Мне необходимо рандомно отдавать клиенту кастомные хидеры из списка
>>>
>>> Есть файл в котором на каждой строчке записи вида
>>>
>>> $key(имя хидера): $val (содержимое)
>>>
>>> С помощью встроенного перла я получаю две переменные $key и $val , и
>>> пытаюсь их применить в директиве add_header
>>>
>>> add_header $key $val
>>>
>>> На клиенте получаю не то , что ожидал
>>>
>>> Имя заголовка $key (те nginx не подставляет значение переменной а в имя
>>> заголовка подставляет само имя переменной )
>>> Тело заголовка как и ожидалось содержит значение переменной $val
>>>
>>> Вопрос - что я делаю не так?
>>> Есть ли у nginx такой функционал?
>>> Если нет то какое есть возможное решение?
>>>
>>> Спасибо
>>>
>>>
>>>
>>> _______________________________________________
>>> nginx-ru mailing list
>>> nginx-ru@nginx.org
>>> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>>>
>>
>> _______________________________________________
>> nginx-ru mailing list
>> nginx-ru@nginx.org
>> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>>
>>
>>
>> _______________________________________________
>> nginx-ru mailing list
>> nginx-ru@nginx.org
>> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>>
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>
>
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

Вопросы по add_header

Дмитрий Жильцов November 22, 2012 06:34AM

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

Anton Yuzhaninov November 22, 2012 06:52AM

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

Maksim Anfilatov November 22, 2012 06:58AM

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

Dmitry Zhiltsov November 22, 2012 09:18AM

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

Maksim Anfilatov November 22, 2012 09:34AM

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

Dmitry Zhiltsov November 22, 2012 02:38PM

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

Maksim Anfilatov November 22, 2012 03:04PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 124
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