在来宾VM上运行Apache和Tomcat,Tomcat重定向到主机

时间:2015-07-23 21:01:38

标签: apache tomcat vagrant

我正在尝试在Vagrant虚拟机上部署我的webapp,并且遇到Tomcat重定向和端口问题。

以下是配置:

  • Guest OS是在Virtualbox上运行的Cent OS 6.3。

  • Apache 2.4已在具有主机端口4000的guest虚拟机上安装并运行 被转发到客户端口80。

  • Tomcat 7已在主机端口4040正在的guest虚拟机上安装并运行 转发到访客端口8000(用于JPDA调试器)。

  • 安装mod_jk以将请求从Apache转发到Tomcat。

在大多数情况下,它有效。我在/ mywebapp上部署了一个webapp,我可以通过在{strong>主机浏览器中输入http://localhost:4000/mywebapp来访问该文件。当mywebapp应用程序执行凭据检查时会发生此问题,如果没有登录用户,则会发出重定向。

此时发生的情况是,我的主机浏览器网址已更改为 https://localhost /mywebapp/login.jsp而不是 {{3 } /mywebapp/login.jsp,这导致我收到错误,因为我的主机上没有运行Apache。

我知道mod_jk正在运行,因为我可以调试mywebapp应用程序并将其跟踪到转发实际发生的位置,所以我知道请求已成功转发 Tomcat。因此我认为问题在于Tomcat而不是Apache。

这是我的server.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
    <Listener className="org.apache.catalina.startup.VersionLoggerListener"/>
    <Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/>
    <Listener className="org.apache.catalina.core.JasperListener"/>
    <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
    <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
    <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>

    <GlobalNamingResources>
        <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
    </GlobalNamingResources>

    <Service name="Catalina">

        <Connector 
            connectionTimeout="20000" 
            port="8080" 
            protocol="HTTP/1.1" 
            redirectPort="8443" />

        <!-- Define an AJP 1.3 Connector on port 8009 -->
        <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>

        <Engine defaultHost="localhost" name="Catalina">
            <Realm className="org.apache.catalina.realm.LockOutRealm">

                <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
            </Realm>

            <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">

                <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log." suffix=".txt"/>

            </Host>
        </Engine>
    </Service>
</Server>

如果我需要分享任何其他配置文件,请告诉我。

如果我手动ssh到来宾VM并运行

wget localhost/mywebapp

按预期返回页面。我不确定这意味着什么。

1 个答案:

答案 0 :(得分:1)

HTTPS和HTTP在不同的端口上运行(默认情况下分别为443和80),因此https://localhost:4000没有任何意义,因为HTTP已经在使用该端口。

您需要:

  1. 也转发HTTPS端口(可能这会很麻烦,因为1000以下的转发端口只能由特权用户完成);或
  2. 而不是使用端口转发,使用private network配置VM并使用分配的IP地址,而不是当前的localhost
  3. 选项2将是我的建议。