4

PlayFrameworkは初めてです。Play 2.0.2を使用していて、同じポートのPlayで複数のアプリケーションを実行したい。

http://localhost:9000/Project1/(controller)&のようになります http://localhost:9000/Project2/(controller)

別のポートで実行できることはわかりましたが、同じポートで実行することに関しては何も見つかりませんでした。

これも可能ですか?

4

3 に答える 3

7

同じポートで 2 つのアプリケーションを実行することはできません。これは Play だけの問題ではありません。

フロントエンド HTTP サーバーを使用してアプリケーションをプロキシします。Java アプリのみを実行する必要がある場合は、 nginxが適しています。Apache 固有の機能に応じて PHP システムも使用する必要がある場合は、Apache プロキシも使用できます。

一般に、ポート 80 でリッスンするようにサーバーを設定し、アプリケーションごとにサーバー ブロック (Apache では仮想ホスト) を追加する必要があります。これらのドメインは、 などの疑似ドメインを使用http://app1.lochttp://app2.locてファイルに追加しhosts、システムで使用できるようにします。 . 次に、各サーバー ブロックを異なるポート (nginx) 上のアプリケーションのプロキシになるように構成します。

server {
  server_name app1.loc www.app1.loc;
    listen 80;

    location / {
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Forwarded-Server $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://127.0.0.1:9021;
            proxy_redirect http://127.0.0.1:9021/ http://app1.loc/;
    }
}

次に、ポート 9021 で最初のアプリを起動します。

他のポートを使用するたびに、他のアプリケーションに対して同じことを行います。

最後に、必要なポート 9021 で app1 を常に実行していることを確認するために、常に同じ設定で実行される bash スクリプト (または Windows のバッチ ファイル) を記述しますrun.sh

#!/bin/bash
play "~run 9021";
于 2013-01-02T08:04:29.280 に答える
5

各アプリケーションは独自のプロセスで実行され、一度に 1 つのポートでリッスンできるプロセスは 1 つしかないため、これは play だけでは不可能です。できることは、ポート 9001 と 9002 でプレイ アプリケーションを実行してから、ポート 9000 で nginx などのサーバーを実行し、さまざまな URL のリクエストをプレイ アプリケーションにルーティングするように構成することです。

この例を参照してください: http://www.cyberciti.biz/tips/using-nginx-as-reverse-proxy.html ケースとの唯一の違いは、1 つのserver {...}ブロックに 2 つのlocationブロックがあることです。次のようになります。

upstream play1 {
      server localhost:9001;
}

upstream play2  {
      server localhost:9002;
}

server {
    listen       localhost:9000;
    server_name  www.example.com;

    access_log  /var/log/nginx/log/www.example.access.log  main;
    error_log  /var/log/nginx/log/www.example.error.log;
    root   /usr/share/nginx/html;
    index  index.html index.htm;

    ## send requests to play1 ##
    location /Project1/ {
        proxy_pass  http://play1;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_redirect off;
        proxy_buffering off;
        proxy_set_header        Host            $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    ## send requests to play2 ##
    location /Project2/ {
        proxy_pass  http://play2;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_redirect off;
        proxy_buffering off;
        proxy_set_header        Host            $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }

}
于 2013-01-02T08:00:57.157 に答える
0

同じサーバーで複数のアプリケーションをホストするか、スケーラビリティやフォールト トレランスのためにアプリケーションの複数のインスタンスの負荷を分散する予定がある場合は、フロントエンド HTTP サーバーを使用できます。フロントエンド HTTP サーバーを使用しても、Play サーバーを直接使用した場合よりも優れたパフォーマンスが得られることはないことに注意してください。これを見ることができます: Play 2 フレームワーク用のフロントエンド HTTP サーバーをセットアップする方法

于 2014-10-23T02:38:09.277 に答える