【问题标题】:Apache webserver not able to connect to Tomcat serverApache 网络服务器无法连接到 Tomcat 服务器
【发布时间】:2023-09-02 02:33:01
【问题描述】:

我已经在本地系统上配置了 Apache Httpd 和 Tomcat,参考本教程:http://www.tutorialspoint.com/white-papers/load-balancing-and-scalability-via-tomcat-clusters.htm。我试图实现负载平衡,但网络服务器和 Tomcat 服务器之间的连接不起作用:

workers.properties 文件中

workers.tomcat_home=D:/Installed/apache-tomcat-7.0.62
workers.java_home=C:/Program Files/Java/jdk1.6.0_45
worker.list=worker1
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1

httpd.conf 文件中

# Path to workers.properties
JkWorkersFile D:/Installed/Apache24/conf/workers.properties
# Path to jk logs
JkLogFile D:/Installed/Apache24/logs/mod_jk.log
# Jk log level [debug/error/info]
JkLogLevel info
# Jk log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# JkOptions for forwarding
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
JkMount /BalServers worker1
JkMount /BalServers/* worker1

我已将mod_jk.so 文件放在模块文件夹中。

我的网络服务器已启动并正在运行(已尝试使用@987654322@ URL,它显示了 Apache 主页)。 Tomcat 服务器也可以工作并且能够获取@987654323@ URL。但是当我尝试@987654324@ URL 时,什么都没有显示,甚至没有 404 状态页面。

请告诉我是否需要任何其他配置?

这是我的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"/>

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

     <Engine jvmRoute="worker1" 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>

【问题讨论】:

  • 你的tomcat server.xml配置正确吗?发布tomcat的server.xml。也可以尝试JkMount / worker1 并检查重定向是否正常工作。
  • 对于JkMount / worker1 也不起作用。
  • 是否需要在httpd.conf文件中配置VirtualHost标签?我使用的是默认的localhost,所以我这可能不是问题。
  • 我个人更喜欢 mod_proxy,所以我对 ajp 知之甚少,但也许你正在混合 mod_jk 和 ajp 配置?您需要告诉tomcat在8080上运行还是ajp能够通过其他方式检测到这一点?
  • 也许你应该提到Apache和tomcat的版本

标签: java apache tomcat


【解决方案1】:

编辑 - 您尚未在 httpd.conf 中加载 workers.properties 文件。此外,如果您打开日志记录并监视 modjk 日志以查看错误所在的位置会更好。

这是成功实现基于 mod_jk 的负载平衡的模板。

httpd.conf

LoadModule    jk_module  modules/mod_jk.so

# This is missing in your httpd.conf
JkWorkersFile conf/workers.properties  
JkLogFile     logs/mod_jk.log  
JkLogLevel    info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "  
JkOptions     +ForwardKeySize +ForwardURICompat -ForwardDirectories  
JkRequestLogFormat     "%w %V %T"

#Use multiple context roots if necessary. But I follow the below.
JkMount  /* balancer

如果要配置 VirtualHost,请将其包装在 &lt;VirtualHost *:80&gt; 左右

然后是下面的workers.properties

worker.list=balancer

worker.worker1.type=ajp13  
worker.worker1.port=8009
worker.worker1.host=172.16.2.31

worker.worker2.type=ajp13
worker.worker2.port=8009
worker.worker2.host=172.16.2.42  


worker.balancer.type=lb
worker.balancer.method=B
worker.worker2.lbfactor=1
worker.balancer.balance_workers=worker1,worker2
#If sticky session is required
worker.loadbalancer.sticky_session=True

看看这些链接

Tomcat Server Configuration Doc

Mulesoft Tutorial

Apache Documentation

【讨论】:

  • 负载平衡是下一部分。首先,我的 Apache 无法与 Tomcat 服务器通信。这就是我所要求的。
  • 您尚未在 httpd.conf、AFAIS 中加载您的workers.properties
  • 它就在那里。我只是忘了在上面的问题中添加那行。
最近更新 更多