0

我在 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)?谁能帮帮我。

4

3 回答 3

0

只需将 nodejs 应用程序绑定到接口0.0.0.0而不是127.0.0.1.

于 2017-04-18T19:50:09.033 回答
0

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

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

采用:

ProxyPass /rocketchat http://localhost:3000/ 
于 2017-04-20T03:33:37.393 回答
0

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

<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 解决了问题。

于 2017-04-21T20:49:01.903 回答