3

nginx を静的ファイルのフロントエンド Web プロキシとして使用し、バックエンド Web サーバーに Starman を使用して、Catalyst アプリケーションを実装しようとしています。(私は Apache と FastCGI を使用でき、それは問題なく動作しますが、PSGI / Plack と Starman のすべてを解決したいと本当に思っています)

Starman は正常に起動し、 で私のリクエストを問題なく処理できますhttp://localhost:5000。フロントエンド プロキシとして使用するために nginx を起動すると、URL が醜くなり、$c->uri_forメソッドを使用するたびにポート番号 (5000) が乱れます。

例 :

$c->uri_for("/login")
になる
http://myapp.example.com:5000/login
それよりも
http://myapp.example.com/login

いくつかのログが作成されているので、何が設定されているかX-Forwarded-Hostを確認できます。X-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::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;
};
于 2010-07-28T15:59:35.453 に答える