apachemod_jk | Virtualhost不侦听doimain名称以将请求转发给Tomcats

apachemod_jk | Virtualhost不侦听doimain名称以将请求转发给Tomcats,apache,tomcat,virtualhost,mod-jk,Apache,Tomcat,Virtualhost,Mod Jk,现在我有另一个问题。我已经调整了配置,现在,根据URL,请求应该被转发到后端的3个Tomcat 如果URL为,则应将请求转发到Tomcat 1,依此类推 当然,它们是virtualhost中的虚拟网站,或者至少我的服务器应该这么认为。然而,它不是这样工作的。如果我访问mysite.com,正如预期的那样,实际上会调用mysite.com,而不是将请求转发给Tomcat1 当我调用localhost时,会直接显示Tomcat的起始页,它实际上应该为localhost:8181显示。Apache起始

现在我有另一个问题。我已经调整了配置,现在,根据URL,请求应该被转发到后端的3个Tomcat

如果URL为,则应将请求转发到Tomcat 1,依此类推

当然,它们是virtualhost中的虚拟网站,或者至少我的服务器应该这么认为。然而,它不是这样工作的。如果我访问mysite.com,正如预期的那样,实际上会调用mysite.com,而不是将请求转发给Tomcat1

当我调用localhost时,会直接显示Tomcat的起始页,它实际上应该为localhost:8181显示。Apache起始页应该实际出现。可以通过/app1..3联系Tomcat。所以这不是问题所在

问题是:为了实现我的目标,我到底需要做什么和在哪里改变?

httpd.conf

Listen 80       
NameVirtualHost *:80

<VirtualHost *:80>
        ServerName www.mysite.com
        RewriteEngine on
        RewriteRule ^/(.*)$/app1/$1 [l,PT]
        JkMount /* tomcat1
</VirtualHost>

<VirtualHost *:80>
        ServerName www.test.de
        RewriteEngine on
        RewriteRule ^/(.*)$/app2/$1 [l,PT]
        JkMount /* tomcat2
</VirtualHost>

<VirtualHost *:80>
        ServerName www.example.de
        RewriteEngine on
        RewriteRule ^/(.*)$/app3/$1 [l,PT]
        JkMount /* tomcat3
</VirtualHost>

[您的
重写规则
在模式和替换之间缺少空格。]

重写将被发送到Tomcat的URI路径通常不是一个好主意:servlet应用程序通常使用

<scheme>://<serverName>:<serverPort>/<contextPath>/relative/path/to/resource
://://相对/路径/到/资源
虽然AJP协议为Tomcat提供了正确的值
,但Apache HTTP服务器接收到的
的原始值永远不会转发给Tomcat

因此,例如:

  • 客户端请求
    http://example.com/index.html
  • 您的重写规则将其更改为
    http://example.com/app1/index.html
    并将其发送给Tomcat
  • Tomcat生成一个HTML页面,其图像位于
    http://example.com/app1/image.png
  • 客户端请求
    http://example.com/app1/image.png
  • 您的重写规则将其更改为
    http://example.com/app1/app1/image.png
    ,它不存在

一个简单的解决方案是将应用程序部署在客户端可以看到的相同上下文路径下:将所有应用程序重命名为
ROOT
,以便将它们部署在网站的根目录下。

谢谢,正确,没有空格。好的,我理解你的解决方案,但在我的情况下,为什么我会得到mysite.com或www.test.de的真实网站内容,而不是tomcat webapp的内容。我是否必须更改或添加“/etc/hosts”中的内容,并直接转发到第一个Tomcat 1,而不是apache主页?也许您有多个同名虚拟主机。
apache2ctl-S
httpd-S
说明了什么?虚拟主机配置看起来不错。抱歉,我没有仔细阅读您的第一条评论:当然,
/etc/hosts
必须包含指向您的计算机的
mysite.com
条目,例如
127.0.2.1 www.mysite.com www.test.de www.example.de
好的,问题解决了。我以前编辑过/etc/hosts,但它无论如何都不起作用。真正的问题是我的浏览器的缓存!!我不得不删除它,现在我没有得到真正的网站test.de等的内容。谢谢你的提示和努力!!
<scheme>://<serverName>:<serverPort>/<contextPath>/relative/path/to/resource