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