uri_for включает номер порта на перенаправлениях - PullRequest
3 голосов
/ 28 июля 2010

Я пытаюсь реализовать приложение Catalyst, используя nginx в качестве внешнего веб-прокси для статических файлов и используя Starman для моего внутреннего веб-сервера. (Я мог бы использовать Apache & FastCGI, и он прекрасно работает, но мне бы очень хотелось, чтобы все про PSGI / Plack и Starman было сглажено)

Starman запускается нормально и прекрасно обрабатывает мои запросы на http://localhost:5000. Когда я запускаю nginx для использования в качестве внешнего прокси-сервера, мои URL становятся уродливыми и портятся с номером порта (5000) всякий раз, когда я использую метод $c->uri_for.

Пример:

$c->uri_for("/login")
becomes
http://myapp.example.com:5000/login 
rather than
http://myapp.example.com/login 

У меня есть несколько создаваемых журналов, чтобы я мог видеть, какие X-Forwarded-Host и X-Forwarded-For установлены как. Для обычных запросов установлены значения (поступающие из nginx), но всякий раз, когда используется метод $c->uri_for, эти значения не существуют.

Кто-нибудь еще имел эту проблему?
Я что-то упускаю в своей конфигурации nginx или моего Confaly Catalyst?

Спасибо!

Конфигурация nginx:

server {
        listen        80;
        server_name   myapp.example.com;

        location /static {
            root /data/users/MyApp/root;
            expires 30d;
        }

        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_pass http://localhost:5000/;
        }
    }

Событие, хотя оно будет запущено на том же физическом сервере, в настройках MyApp я установил:

MyApp->config(using_frontend_proxy => 1)

Версии:

Catalyst : 5.80024
nginx : 0.7.67
Plack : 0.9942
Starman : 0.2006

Ответы [ 2 ]

4 голосов
/ 28 июля 2010

Моя проблема была в моем файле myapp.psgi.

из Catalyst :: Engine :: PSGI и посмотрите на Plack::Middleware::ReverseProxy:

...
use Plack::Builder;
use MyApp;

MyApp->setup_engine('PSGI');
my $app = sub { MyApp->run(@_) };

builder {
 enable_if { $_[0]->{REMOTE_ADDR} eq '127.0.0.1' } 
        "Plack::Middleware::ReverseProxy";
 $app;
};
1 голос
/ 05 февраля 2017

В моем случае интерфейс был на другом хосте и добавлял

MyApp->config(using_frontend_proxy => 1)

сделал разницу и решил проблему.

...