[Moscow.pm] nginx + Catalyst + PSGI
iSage
isage на aumi.ru
Пт Сен 30 00:34:06 PDT 2011
Иногда очень полезно заглядывать в исходники того, что вы используете.
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