【问题标题】:How do I use Apache as a proxy for my Tomcat application?如何使用 Apache 作为 Tomcat 应用程序的代理?
【发布时间】:2014-06-08 17:49:37
【问题描述】:

我在将 Apache 配置为反向代理时遇到问题,以便我可以从 Tomcat 应用程序的 URL 中删除端口号。我已经阅读了几个教程,但我总是遇到同样的问题:Apache 似乎传递了 HTML,但没有传递底层的编程部分和样式。 (抱歉,这是我能想到的最好的描述。下面的屏幕截图可以说明我的意思)。

下面是我直接通过8080端口访问Tomcat时看到的:

但这是我通过 Apache 转发时看到的:

正如许多教程所建议的那样,我启用了mod_proxyproxy_httpproxy_html 和其他一些,但没有解决我的问题。这是 Apache 读取的我的虚拟主机文件:

<VirtualHost *:80>
    ServerAdmin XXXXX@XXX.COM
    ServerName www.compastround.com
    DocumentRoot /home/anthony/Public/

    ErrorLog /var/log/apache2/music.compastround.com-error.log

    CustomLog /var/log/apache2/music.compastround.com-access.log combined
    ServerSignature Off

    ProxyPass /music/ http://localhost:8080/subsonic-tomcat/
    ProxyPassReverse /music/ http://localhost:8080/subsonic-tomcat/

    <Directory /home/anthony/Public/>
        Order allow,deny
        Allow from all
        Require all granted
        Options FollowSymLinks
        AllowOverride All
        Options -Multiviews
    </Directory>
</VirtualHost>

这是 Tomcat 的 server.xml:

<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
    <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 name="UserDatabase" auth="Container"
                            type="org.apache.catalina.UserDatabase"
                            description="User database that can be updated and saved"
                            factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
                            pathname="conf/tomcat-users.xml" />
    </GlobalNamingResources>

    <Service name="Catalina">

        <Connector port="8080" protocol="HTTP/1.1"
                             connectionTimeout="20000"
                             URIEncoding="UTF-8"
                             redirectPort="8443" />

        <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               URIEncoding="UTF-8"
               proxyName="www.compastround.com"
               proxyPort="80" />

        <Engine name="Catalina" defaultHost="localhost">

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

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

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

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

任何帮助将不胜感激。提前致谢。

【问题讨论】:

  • 不要更改 httpd 和 Tomcat 之间的上下文路径 - 这为出错的可能性打开了一个世界。它们都是可以修复的,但需要做很多工作。保持简单并在“/music”下重新部署“/subsonic-tomcat”Web 应用程序。然后回来告诉我们哪些有效,哪些无效。
  • 就是这样,谢谢!我没有意识到保持上下文路径相同会更容易。

标签: apache jsp tomcat ubuntu


【解决方案1】:

我的 httpd-vhosts.conf::

<VirtualHost *:80> 
ServerAdmin 974984076@qq.com
ServerName XXXX
ServerAlias localhost 
ProxyPass / balancer://cluster/ stickysession=JSESSIONID|jsessionid nofailover=Off
ProxyPassReverse / balancer://cluster/ 
ErrorLog "logs/lbtest-error.log"
CustomLog "logs/lbtest-access.log" common
<Proxy balancer://cluster>

BalancerMember ajp://XXX:XXX loadfactor=1 route=tomcat1
BalancerMember ajp://XXX:XXX loadfactor=2 route=tomcat2
</Proxy>

</VirtualHost>

我的 tomcat serverl.xml

  <Service name="Catalina">


    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8"/>


    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />



    <Engine name="Catalina" defaultHost="localhost"  jvmRoute="tomcat1">

      <Realm className="org.apache.catalina.realm.LockOutRealm">

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

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




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



      </Host>


      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" 

                 channelSendOptions="8">  

          <Manager className="org.apache.catalina.ha.session.DeltaManager" 

                   expireSessionsOnShutdown="false" 

                   notifyListenersOnReplication="true"/>  



          <Channel className="org.apache.catalina.tribes.group.GroupChannel">  

            <Membership className="org.apache.catalina.tribes.membership.McastService" 

           address="228.0.0.4"                port="45564"   

                        frequency="500" 

                        dropTime="3000"/>  

            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" 

                      address="auto" 

                      port="4000"  

                      autoBind="100" 

                      selectorTimeout="5000" 

                      maxThreads="6"/>  



            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">  

              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" />  

            </Sender>  

            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>  

            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>  

         <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>  

          </Channel>  

          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" 

                 filter=""/>  

          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>  



          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" 

                    tempDir="/tmp/war-temp/" 

                    deployDir="/tmp/war-deploy/" 

                    watchDir="/tmp/war-listen/" 

                    watchEnabled="false"/>  

          <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>  

          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>  
     </Cluster>



  </Engine>
  </Service>

【讨论】:

    【解决方案2】:

    根据 Mark Thomas 在 cmets 中的建议,我更改了我的虚拟主机文件,以便上下文路径相同,我的问题得到了解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-14
      • 2011-11-16
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多