在同一端口上运行 Apache http、Apache tomcat 和 nodejs

在同一端口上运行 Apache http、Apache tomcat 和 nodejs

我是一名 Web 开发人员,对于一个项目,我需要在不使用端口的情况下运行 tomcat 和 nodejs。

我看到了有关 httpd 中的代理模块的一些帖子,因此我创建了两个虚拟主机,如下所示:

<VirtualHost *:80>
       ServerName localhost
       # ErrorLog "logs/tomcat-error.log"
       ProxyPreserveHost On
       ProxyPass /tomcat http://localhost:8080/
       ProxyPassReverse /tomcat http://localhost:8080/
</VirtualHost>

<VirtualHost *:80>
      ServerName localhost
      # ErrorLog "logs/nodejs-error.log"
      ProxyPreserveHost On
      ProxyPass /nodejs http://localhost:8000/
      ProxyPassReverse /nodejs http://localhost:8000/
</VirtualHost>

当我尝试访问 localhost/nodejs 或 localhost/tomcat 时,出现未找到错误。

有人能解释一下为什么吗?

谢谢 ;-)

答案1

第一个匹配项VirtualHost遮蔽了以下匹配项。因此永远不会到达ProxyPassto 。nodejs

您应该将其全部合并为:

<VirtualHost *:80>
   ServerName localhost
   # ErrorLog "logs/tomcat-error.log"

   <Location /tomcat/ >
      ProxyPreserveHost On
      ProxyPass http://localhost:8080/
      ProxyPassReverse http://localhost:8080/
   </Location>

   # ErrorLog "logs/nodejs-error.log"
   <Location /nodejs/ >
      ProxyPreserveHost On
      ProxyPass http://localhost:8000/
      ProxyPassReverse http://localhost:8000/
   </Location>
</VirtualHost>

您是否启用了proxyproxy_http模块?

当然,tomcat和nodejs端也应该到位。

答案2

我通过在sites-enabledconf中执行以下操作解决了我的问题:

NameVirtualHost MY-IP:80

<VirtualHost MY-IP:80>
    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/
    ServerName dummy.com
</VirtualHost>

<VirtualHost MY-IP:80>
    DocumentRoot /var/www
    ServerName dummy.org
</VirtualHost>

希望它可以帮助其他人

相关内容