如何使用不同的端口在同一台服务器上运行多个跨平台的Web应用程序?

时间:2017-04-18 19:26:11

标签: node.js apache tomcat java-ee rocket.chat

我在tomcat 7.0上运行一个java web应用程序,它是在media temple Ubuntu 16.04服务器上安装的。应用程序在端口8080上运行,我有一个绑定到端口的域。 例如public-ip-of-server:8080 xyz.com 现在,我想使用端口3000在同一Linux服务器上运行节点js应用程序(rocket-chat)。我已经配置了整个应用程序,并且应用程序在localhost:3000上运行,但是当我尝试访问应用程序时使用服务器的公共IP(例如public-ip:3000 /),我无法访问它。

我已使用命令

允许端口3000上的流量
ufw allow 3000

我还编辑了apache2.conf,

ProxyPass /rocketchat http://public-ip-of-server:3000/ 
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module
modules/mod_proxy_http.so

但更改此参数后,我无法重新启动apache2服务。 所以我还原了这些变化。

如何在同一个Linux服务器上运行应用程序(java和node js)?任何人都可以帮助我。

3 个答案:

答案 0 :(得分:0)

将nodejs app绑定到接口0.0.0.0而不是127.0.0.1

答案 1 :(得分:0)

在Apache配置中,您应该使用localhost而不是public ip。所以而不是:

ProxyPass /rocketchat http://public-ip-of-server:3000/ 

使用:

ProxyPass /rocketchat http://localhost:3000/ 

答案 2 :(得分:0)

我正在使用Ubuntu服务器,因此httpd.conf不存在,所以我在apache2的sites-available文件夹中创建了另一个文件。(例如xyz.conf)。 我有两个域指向相同的媒体寺庙名称服务器, 通过在xyz.conf中创建虚拟主机,我在端口8080上使用一个域指向tomcat应用程序,在端口3000上使用另一个域指向节点js应用程序

<VirtualHost *:80>
    ServerName  xyz.com
    ProxyPass / http://localhost:3000/
     ProxyPassReverse / http://localhost:3000/
</VirtualHost>
<VirtualHost *:80>
    ServerName  abc.com
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
</VirtualHost>

在此之后我使用命令启用代理模式:

sudo a2enmod proxy

并使用命令

将此xyz.conf文件作为站点配置文件
sudo a2ensite xyz.conf

它会要求您重新加载apache2服务, 只需重新加载并重新启动,

e.g sudo systemctl restart apache2.service

通过创建虚拟主机将请求(通过apache2的端口80收到)转发到tomcat:8080和nodejs:3000来解决问题。