我是 Play Framework 的新手。我正在使用 Play 2.0.2,我想在同一端口上的 Play 上运行多个应用程序。
它应该像
http://localhost:9000/Project1/(controller)
&http://localhost:9000/Project2/(controller)
我发现您可以在不同的端口上运行它,但没有发现在同一个端口上运行它。
这甚至可能吗?
我是 Play Framework 的新手。我正在使用 Play 2.0.2,我想在同一端口上的 Play 上运行多个应用程序。
它应该像
http://localhost:9000/Project1/(controller)
&http://localhost:9000/Project2/(controller)
我发现您可以在不同的端口上运行它,但没有发现在同一个端口上运行它。
这甚至可能吗?
你不能在同一个端口上运行两个应用程序,这不仅仅是 Play 的问题。
使用前端 HTTP 服务器代理应用程序。如果您必须只运行 java 应用程序,那么nginx将是不错的选择,如果您还需要根据 Apache 特定功能使用 PHP 系统,您也可以使用Apache 代理。
一般来说:您需要将服务器设置为侦听端口 80,然后使用一些伪域(如http://app1.loc
、http://app2.loc
等)为每个应用程序添加一个服务器块(Apache 中的虚拟主机),将它们添加到您的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 中的 bat 文件),它将始终使用相同的设置运行它,即run.sh
:
#!/bin/bash
play "~run 9021";
单独播放是不可能的,因为每个应用程序都在自己的进程中运行,并且一次只能有一个进程监听一个端口。您可以做的是在端口 9001 和 9002 上运行您的播放应用程序,然后在端口 9000 上运行像 nginx 这样的服务器,并将其配置为将不同 URL 的请求路由到您的播放应用程序。
请参阅此示例:http ://www.cyberciti.biz/tips/using-nginx-as-reverse-proxy.html
与您的情况的唯一区别是您将有一个server {...}
块,其中包含两个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 服务器提供更好的性能。你可以看看这个:How to setup a front-end HTTP server for Play 2 Framework