uri_for包含redirect上的端口号

我试图实现一个Catalyst应用程序使用nginx作为静态文件的前端Web代理,并使用Starman作为我的后端Web服务器。 (我可以使用Apache和FastCGI,它工作得很好,但我真的希望得到整个PSGI / Plack和Starman的东西)

Starman启动好了,可以在http://localhost:5000上处理我的请求。 当我启动nginx作为我的前端代理时,无论何时何地使用$c->uri_for方法,我的url都会变得丑陋,并随着端口号(5000)而$c->uri_for

例如:

 $ C-> uri_for( “/login”)
变
 http://myapp.example.com:5000/login 
而不是
 http://myapp.example.com/login 

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

有没有其他人有这个问题?
我是否在configurationnginx或Catalystconfiguration文件时丢失了其他的东西?

谢谢!

nginxconfiguration:

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

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

        位置 / {
             proxy_set_header主机$主机;
             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 /;
         }
     }

事件虽然这将运行在相同的物理服务器上,在MyAppconfiguration我已经设置:

 MyApp-> config(using_frontend_proxy => 1)

版本:

催化剂:5.80024
 nginx:0.7.67
 Plack:0.9942
 Starman:0.2006

我的问题是在我的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; }; 

在我的情况下,前端是在一个不同的主机,并添加

 MyApp->config(using_frontend_proxy => 1) 

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