PlayFrameworkは初めてです。Play 2.0.2を使用していて、同じポートのPlayで複数のアプリケーションを実行したい。
http://localhost:9000/Project1/(controller)
&のようになります
http://localhost:9000/Project2/(controller)
別のポートで実行できることはわかりましたが、同じポートで実行することに関しては何も見つかりませんでした。
これも可能ですか?
PlayFrameworkは初めてです。Play 2.0.2を使用していて、同じポートのPlayで複数のアプリケーションを実行したい。
http://localhost:9000/Project1/(controller)
&のようになります
http://localhost:9000/Project2/(controller)
別のポートで実行できることはわかりましたが、同じポートで実行することに関しては何も見つかりませんでした。
これも可能ですか?
同じポートで 2 つのアプリケーションを実行することはできません。これは Play だけの問題ではありません。
フロントエンド HTTP サーバーを使用してアプリケーションをプロキシします。Java アプリのみを実行する必要がある場合は、 nginxが適しています。Apache 固有の機能に応じて PHP システムも使用する必要がある場合は、Apache プロキシも使用できます。
一般に、ポート 80 でリッスンするようにサーバーを設定し、アプリケーションごとにサーバー ブロック (Apache では仮想ホスト) を追加する必要があります。これらのドメインは、 などの疑似ドメインを使用http://app1.loc
しhttp://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";
各アプリケーションは独自のプロセスで実行され、一度に 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;
}
}
同じサーバーで複数のアプリケーションをホストするか、スケーラビリティやフォールト トレランスのためにアプリケーションの複数のインスタンスの負荷を分散する予定がある場合は、フロントエンド HTTP サーバーを使用できます。フロントエンド HTTP サーバーを使用しても、Play サーバーを直接使用した場合よりも優れたパフォーマンスが得られることはないことに注意してください。これを見ることができます: Play 2 フレームワーク用のフロントエンド HTTP サーバーをセットアップする方法