编程语言
首页 > 编程语言> > perl-uri_for包含重定向上的端口号

perl-uri_for包含重定向上的端口号

作者:互联网

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

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

范例:

$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或Catalyst conf时是否还缺少其他配置?

谢谢!

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 config中,我已经设置了:

MyApp->config(using_frontend_proxy => 1)

版本:

Catalyst : 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;
};

标签:nginx,catalyst,starman,perl
来源: https://codeday.me/bug/20191023/1916652.html