Да, через 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:
Добрый день.
В документации сказано только, что значение может содержать переменные.
22 ноября 2012 г., 15:32 пользователь Дмитрий Жильцов <zaabjuda@xxxxxxxxx> написал:
Здравствуйте.
Появился вопрос по работе директивы add_header
Сначала описание задачи.
Мне необходимо рандомно отдавать клиенту кастомные хидеры из списка
Есть файл в котором на каждой строчке записи вида
$key(имя хидера): $val (содержимое)
С помощью встроенного перла я получаю две переменные $key и $val , и пытаюсь их применить в директиве add_header
add_header $key $val
На клиенте получаю не то , что ожидал
Имя заголовка $key (те nginx не подставляет значение переменной а в имя заголовка подставляет само имя переменной ) Тело заголовка как и ожидалось содержит значение переменной $val
Вопрос - что я делаю не так?
Есть ли у nginx такой функционал? Если нет то какое есть возможное решение?