我是一名 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
遮蔽了以下匹配项。因此永远不会到达ProxyPass
to 。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>
您是否启用了proxy
和proxy_http
模块?
当然,tomcat和nodejs端也应该到位。
答案2
我通过在sites-enabled
conf中执行以下操作解决了我的问题:
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>
希望它可以帮助其他人