【问题标题】:HOw to run multiple applications in play framework on the same port如何在同一端口上在 play framework 中运行多个应用程序
【发布时间】:2013-01-02 05:51:43
【问题描述】:

我是 Play 框架的新手。我正在使用 Play 2.0.2,我想在同一端口上的 Play 上运行多个应用程序。

应该是这样的 http://localhost:9000/Project1/(controller) & http://localhost:9000/Project2/(controller)

我发现您可以在不同的端口上运行它,但没有发现在同一个端口上运行它。

这可能吗?

【问题讨论】:

    标签: playframework


    【解决方案1】:

    你不能在同一个端口上运行两个应用程序,这不仅仅是 Play 的问题。

    使用frontend HTTP server 代理应用程序。如果您只需要运行 java 应用程序,那么nginx 将是不错的选择,如果您还需要根据 Apache 特定功能使用 PHP 系统,您也可以使用Apache proxy

    通常:您需要将服务器设置为侦听端口 80,然后使用一些伪域(如 http://app1.lochttp://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";
    

    【讨论】:

    • nginx 可以很好地处理 php,例如使用 php-fpm。
    • 对,无论如何,一些旧的 PHP 系统在很大程度上依赖于一些 Apache 的特定功能(至少开箱即用),所以我不喜欢(个人)与 nginx '战斗' :) 相反,我更喜欢为服务器使用单独的机器或...使用 nginx 代理 apache :)
    • 是的,但我不会在涉及 php 时推荐 apache。 nginx 文档有一个广泛的应用程序特定配置列表。
    【解决方案2】:

    单独使用 play 是不可能的,因为每个应用程序都在自己的进程中运行,并且一次只能有一个进程监听一个端口。您可以在端口 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;
        }
    
    }
    

    【讨论】:

    【解决方案3】:

    如果您计划在同一服务器上托管多个应用程序或对应用程序的多个实例进行负载平衡以实现可扩展性或容错,则可以使用前端 HTTP 服务器。 请注意,使用前端 HTTP 服务器永远不会比直接使用 Play 服务器提供更好的性能。你可以看看这个:How to set-up a front-end HTTP server for Play 2 Framework

    【讨论】:

      猜你喜欢
      • 2012-06-28
      • 1970-01-01
      • 2016-07-08
      • 1970-01-01
      • 2023-01-19
      • 2015-11-07
      • 2013-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多