【问题标题】:uri_for includes port number on redirectsuri_for 包括重定向的端口号
【发布时间】:2011-03-22 05:14:29
【问题描述】:

我正在尝试使用 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

【问题讨论】:

    标签: perl nginx catalyst starman


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      在我的情况下,前端位于不同的主机中并添加

      MyApp->config(using_frontend_proxy => 1)
      

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

      【讨论】:

      • 这记录在metacpan.org/pod/Catalyst#PROXY-SUPPORT 并且应该是公认的答案,因为这是内置在 Catalyst 中的,不需要修改生成的 .psgi 文件并且可以通过本地配置进行设置。跨度>
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-11
      • 2017-09-09
      • 2019-03-19
      • 2018-11-22
      • 2016-04-22
      • 2014-12-02
      相关资源
      最近更新 更多