我在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)?任何人都可以帮助我。
答案 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来解决问题。