[Moscow.pm] nginx + Catalyst + PSGI
Иван Соколов
vaneska.ru на gmail.com
Пт Сен 30 01:22:34 PDT 2011
Очень даже заглядывал, но иногда смотришь в книгу, а видишь фигу ))
В конфиге nginx было
proxy_set_header X-Forwarded-Https 1;
30 сентября 2011 г. 11:34 пользователь iSage <isage на aumi.ru> написал:
> Иногда очень полезно заглядывать в исходники того, что вы используете.
> Plack::Middleware::ReverseProxy:
>
> $env->{HTTPS} = $env->{'HTTP_X_FORWARDED_HTTPS'}
> if $env->{'HTTP_X_FORWARDED_HTTPS'};
> $env->{HTTPS} = 'ON'
> if $env->{'HTTP_X_FORWARDED_PROTO'} &&
> $env->{'HTTP_X_FORWARDED_PROTO'} eq 'https'; # Pound
> $env->{'psgi.url_scheme'} = 'https' if $env->{HTTPS} && uc
> $env->{HTTPS} eq 'ON';
> my $default_port = $env->{'psgi.url_scheme'} eq 'https' ? 443 : 80;
>
>
>
>
> On Fri, 30 Sep 2011 11:21:42 +0400, Иван Соколов <vaneska.ru на gmail.com>
> wrote:
>> Добрый день!
>>
>> Схема такая
>> frontend - nginx
>> backend - plackup -s Starman app.psgi --port 3000
>>
>> Решить проблему с X-Real-IP удалость очень просто с помощью
>> Plack::Middleware::ReverseProxy
>> Но есть другая проблема.
>> Т.к. передается http запрос на backend, $c->request->base выдает схему http
>> и некоторые модули типа Catalyst::Controller::FormBuilder в form
>> action="" кладут http url.
>> Временно решил это так:
>> builder {
>> enable_if { $_[0]->{REMOTE_ADDR} eq '127.0.0.1' }
>> "Plack::Middleware::ReverseProxy";
>> enable sub {
>> my $app = shift;
>> sub {
>> my $env = shift;
>> $env->{'psgi.url_scheme'} = 'https' if
>> $env->{HTTP_X_IS_SECURE} || $env->{HTTPS};
>> $app->($env);
>> }
>> };
>> $app;
>> };
>>
>> Может есть какое-то более правильное решение?
>>
>> --
>> С уважением,
>> Иван
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
--
С уважением,
Иван
Подробная информация о списке рассылки Moscow-pm