[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