Может ли кто-нибудь помочь мне с nginx с модулем Perl? Мне уже удалось создать функцию в Perl, используя образ ubi8/nginx-124, но я не могу установить результат функции в заголовке.
0
Имея это в файле конфигурации nginx:
http {
perl_modules /opt/app-root/etc/nginx/nginx-perl/;
perl_require module1.pm;
perl_set $test module1::handler; #it is not calling the function here, it is only called in the location block
}
location = /perl {
perl module1::handler; #I've already tried with and without this line
add_header X-My-Header $test; #I tried adding the header this way and from within the code with $r.But both without success
}
и этот файл perl:
package module1;;
use nginx;
sub handler {
my $r = shift;
my $foo = 'foo';
$r->send_http_header("text/html");
$r->header_out("WWW-Authenticate" => $foo);
$r->print("<h3>SUCCESS:</h3>");
return $foo;
}
1;
Извините, но то, что вы мне прислали, не имеет ничего общего с тем, что мне нужно. Единственное, что мне может понадобиться, это использование $r->header_out("X-Custom-Header", "CUSTOM_VALUE");, но, как я уже говорил, это именно то, что не работает."
Это правильный путь:
package module1;
use lib '/opt/app-root/etc/nginx/nginx-perl/';
use strict;
use nginx;
sub handler {
my $r = shift;
$r->header_out("X-Custom-Header", "CUSTOM_VALUE"); #This line has to be placed before of send_http_header
$r->send_http_header("text/html");
$r->print("Hello, world!");
return OK;
}
1;
И файл конфигурации должен быть:
http {
perl_modules /opt/app-root/etc/nginx/nginx-perl/;
perl_require module1.pm;
}
location = /perl {
perl module1::handler;
}
Другой способ может быть:
http {
perl_modules /opt/app-root/etc/nginx/nginx-perl/;
perl_require module1.pm;
perl_set $foo module1::handler;
}
location = /perl {
proxy_pass http://aplha.beta.com;
proxy_set_header "X-Custom-Header" $foo;
}
sub handler {
return 'CUSTOM_VALUE';
}
Вы смотрели код существующих модулей? Например: gist.github.com/kwmiebach/2f03baaae7e4f86f9573f1f30818d36f