3

我正在尝试使用 nginx 作为静态文件的前端 Web 代理,并使用 Starman 作为我的后端 Web 服务器来实现 Catalyst 应用程序。(我可以使用 Apache 和 FastCGI,它工作得很好,但我真的很想解决整个 PSGI / Plack 和 Starman 的问题)

Starman 启动正常,可以很好地处理我的请求http://localhost:5000。当我启动 nginx 用作我的前端代理时,无论何时何地使用该$c->uri_for方法,我的 url 都会变得丑陋并与端口号 (5000) 混淆。

例子 :

$c->uri_for("/登录")
变成
http://myapp.example.com:5000/login
而不是
http://myapp.example.com/login

我有一些正在创建的日志,所以我可以看到什么X-Forwarded-HostX-Forwarded-For被设置为。对于普通请求,设置了值(来自 nginx),但无论何时使用该$c->uri_for方法,这些值都不存在。

有没有其他人有这个问题?
我在配置 nginx 或 Catalyst conf 时是否遗漏了其他内容?

谢谢!

nginx 配置:

服务器 {
        听 80;
        server_name myapp.example.com;

        位置/静态{
            根 /data/users/MyApp/root;
            30天到期;
        }

        地点 / {
            proxy_set_header 主机 $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)

版本:

催化剂:5.80024
nginx:0.7.67
板厚:0.9942
星人:0.2006
4

2 回答 2

4

我的问题在我的myapp.psgi文件中。

Catalyst::Engine::PSGIPlack::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;
};
于 2010-07-28T15:59:35.453 回答
1

就我而言,前端位于不同的主机中并添加

MyApp->config(using_frontend_proxy => 1)

确实有所作为并解决了问题。

于 2017-02-05T16:19:44.143 回答