Redirect 使用Apache2.x和Tomcat6.x将子域映射到Servlet上下文

Redirect 使用Apache2.x和Tomcat6.x将子域映射到Servlet上下文,redirect,subdomain,tomcat6,mod-proxy,apache2.2,Redirect,Subdomain,Tomcat6,Mod Proxy,Apache2.2,我已经在Tomcat 6.x下的http://dev.mycompany.com:8080/archiva可以访问应用程序和所有内容,但我想从子域archiva.mycompany.com访问它 我让Apache 2.x在端口80上运行,并使用虚拟主机和mod_代理从其他子域路由到我在这台机器上运行的其他各种服务 现在我想创建一个子域archiva.dev.mycompany.com,并将其指向dev.mycompany.com:8080/archiva 我想不出我需要在我的ProxyPass和

我已经在Tomcat 6.x下的
http://dev.mycompany.com:8080/archiva
可以访问应用程序和所有内容,但我想从子域
archiva.mycompany.com
访问它

我让Apache 2.x在端口
80
上运行,并使用虚拟主机和mod_代理从其他子域路由到我在这台机器上运行的其他各种服务

现在我想创建一个子域
archiva.dev.mycompany.com
,并将其指向
dev.mycompany.com:8080/archiva

我想不出我需要在我的
ProxyPass
ProxyPassReverse
中放入什么才能使它像我希望的那样工作

我尝试了以下方法,它所做的只是一遍又一遍地向URL添加
/archiva

<VirtualHost *:80>
    ServerAdmin me@mycompany.com
    ServerName archiva.dev.mycompany.com
    ProxyPreserveHost On

    <Proxy *>
      Order allow,deny
      Allow from all
    </Proxy>
    ProxyPass / http://dev.mycompany.com:8080/archiva
    ProxyPassReverse / http://dev.mycompany.com:8080/archiva
</VirtualHost>
我又一次在谷歌上找到了所有我能找到的东西,并尝试了以下方法:

ProxyPass / ajp://dev.mycompany.com:8080/archiva/
ProxyPassReverse / http://dev.mycompany.com:8080/archiva/
现在我刚从Winstone Servlet引擎中得到一个404错误代码,我知道我已经接近了


谁能告诉我,我需要什么魔法咒语才能让它按我的愿望运行呢?

我也有同样的问题

必须做的事情:

  • 将archiva重新配置为具有archiva 在/而不是/archiva上运行/

  • 在中配置反向代理 apache2配置

所以现在我有了“http://repo.[domain]/,指向“http://[domain]:[port]/”

以下是我当前的Apache2配置:

ProxyRequests Off
ProxyPreserveHost On
<VirtualHost [ip]>

        ServerName repo.[domain]
        ProxyPass / http://[ip]:8082/
        ProxyPassReverse / http://[ip]:8082/

        <Proxy *>
              Order deny,allow
              Allow from all
        </Proxy>

</VirtualHost>
ProxyRequests关闭
代理主机
ServerName repo.[域]
ProxyPass/http://[ip]:8082/
ProxyPassReverse/http://[ip]:8082/
命令拒绝,允许
通融
关于conf/jetty.xml配置:

ProxyRequests Off
ProxyPreserveHost On
<VirtualHost [ip]>

        ServerName repo.[domain]
        ProxyPass / http://[ip]:8082/
        ProxyPassReverse / http://[ip]:8082/

        <Proxy *>
              Order deny,allow
              Allow from all
        </Proxy>

</VirtualHost>
-删除此项:

<!--
  <Call class="org.mortbay.jetty.webapp.WebAppContext" name="addWebApplications">
    <Arg><Ref id="Contexts"/></Arg>
    <Arg>./apps</Arg>
    <Arg>org/mortbay/jetty/webapp/webdefault.xml</Arg>
    <Arg><Ref id="plusConfig"/></Arg>
    <Arg type="boolean">True</Arg>
    <Arg type="boolean">False</Arg>
  </Call>
-->

+添加以下内容:

  <New class="org.mortbay.jetty.webapp.WebAppContext">
    <Arg><Ref id="Contexts"/></Arg>
    <Arg>./apps/archiva</Arg>
    <Arg>/</Arg>
    <Set name="configurationClasses"><Ref id="plusConfig"/></Set>
  </New>

/应用程序/阿奇瓦
/

您得到的原因:

HTTP状态404-/archivaarchiva/

是因为您没有以/结束ProxyPass最后一条路径,但以一结束了第一条路径

ProxyPass/

ProxyPass和ProxyPassReverse都应以结尾/

改写为(注意结尾/):

ProxyPass/

见:http://httpd.apache.org/docs/2.2/mod/mod#u proxy.html#proxypass


如果第一个参数以尾随/结尾,则第二个参数也应以尾随/结尾,反之亦然。否则,对后端的请求可能会错过一些必要的斜杠,无法提供预期的结果。

这个问题应该在中或顺便问一下,我只想“对于我的主archiva URL,如果有一天我决定切换回Artifactory或archiva以外的其他应用程序,为了能够拥有完全相同的URL。是的,我有一个想法,将其作为根应用程序,但我有多个应用程序,对于我想成为子域的每个应用程序,Archiva、Hudson等,都必须有一个单独的servlet容器实例,这似乎很荒谬。在我这边,出于各种原因,这就是我正在做的:我在一个单独的servlet容器中运行每个应用程序,如果可用,通常通过Jetty(例如Hudson、Archiva、sonar)。为什么?因为在同一个tomcat容器(permgen space等)中运行所有这些服务时,我遇到了很多内存问题,现在使用分离的服务更简单了,每个服务都运行在通过Apache隐藏的特定端口上,仅此而已:这将在/而不是/archiva/下映射archiva web应用程序。重新阅读我的问题,您将看到我尝试了两种方法,但两种方法都不正确。阅读理解,不要只是浏览问题