windows 下mod_proxy_ajp集成Apache2.4与Tomcat7反向代理与均衡负载

吕高雅
2023-12-01
一个项目里要用,做了个简单配置

.准备Apache

1.下载Apache

本次使用的是ApacheHaus 2.4.10-x64版本,因为官方暂未提供2.4.10 for windows下载。

    下载地址:http://httpd.apache.org/docs/2.4/platform/windows.html

2.装载Apache服务

    2.1管理员运行CMD后执行“Apache路径”\bin\httpd.exe -k install命令,执行后在服务中或ApacheMonitor中启动Apache,启动后访问 http://localhost,若显示Apache页面则安装成功。

       2.2如果安装时遇到下列异常

         error on line 39

         修改httpd.conf

      Define SRVROOT "/Apache24"

ServerRoot "${SRVROOT}"

修改为

Define SRVROOT "D:/Apache24"  --此处为Apache绝对路径

ServerRoot "D:/Apache24"      --此处为Apache绝对路径

 

 

     若安装有问题可使用“Apache路径”\bin\httpd.exe -k uninstall命令卸载服务。

.准备Tomcat

本次使用的是7.0.57版本,此项很常用,不再多做阐述。

.配置Apachehttpd.conf

 因为Apache2.1版本后已经支持mod_proxy_ajp,无需下载其他文件。

 1.修改httpd.conf

   打开Apacheconf/httpd.conf文件,将以下项目注释放开

   #LoadModule buffer_module modules/mod_buffer.so  --选配

    以上模块提供了缓冲的输入和输出栈的功能

LoadModule cache_module modules/mod_cache.so  --选配

LoadModule cache_disk_module modules/mod_cache_disk.so  --选配

以上两个模块为mod_cache提供基于磁盘的缓存管理,推荐加载

 

LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so

LoadModule slotmem_shm_module modules/mod_slotmem_shm.so

以下为mod_proxy权限

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

LoadModule proxy_connect_module modules/mod_proxy_connect.so

LoadModule proxy_ftp_module modules/mod_proxy_ftp.so

LoadModule proxy_http_module modules/mod_proxy_http.so

2.修改下列选项

  <IfModule dir_module>

    DirectoryIndex index.html

</IfModule>

修改为

<IfModule dir_module>

    DirectoryIndex index.html index.jsp  --如果index页面为jsp的话

</IfModule>

 

 

DocumentRoot "${SRVROOT}/htdocs"

<Directory "${SRVROOT}/htdocs">

修改为

DocumentRoot "D:\Tomcat7\apache-tomcat-7.0.57\webapps\ROOT"

<Directory "D:\Tomcat7\apache-tomcat-7.0.57\webapps\ROOT">

 

 

3.在文件最后增加下列选项

  <proxy balancer://cluster/>

     BalancerMember ajp://127.0.0.1:8010 loadfactor=1 route=jvm1

     BalancerMember ajp://127.0.0.1:9010 loadfactor=1 route=jvm2

</proxy>

     注意:此处有几个Tomcat做均衡负载就添加几个BalancerMember,而此处的8010端口是指Tomcatserver.xml

<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />中的port

        多个Tomcat记得首先修改此端口,以免端口冲突。

.配置Apachehttpd-vhosts.conf

   1.修改下列选项

      <VirtualHost _default_:80>

DocumentRoot "${SRVROOT}/htdocs"

#ServerName www.example.com:80

</VirtualHost>

改为

#<VirtualHost _default_:80>

#DocumentRoot "${SRVROOT}/htdocs"

#ServerName www.example.com:80

#</VirtualHost>

此选项是将默认的配置全部注释掉

2.添加下列选项

  <VirtualHost *:80>  

         ServerAdmin xxxxxx@xx.com  --可以不填写

         ServerName  127.0.0.1  --注意修改

         ServerAlias localhost  --注意修改

         ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On  

         ProxyPassReverse / balancer://cluster/  

         ErrorLog "logs/proxyTest-error.log" 

         CustomLog "logs/lbtest-access.log" common 

</VirtualHost>

  .配置Tomcatserver.xml

     1.修改下列选项

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

       

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

此处jvm1Apachehttpd.confBalancerMember配置中的route值相同

 

现在全部配置已经结束,重启ApacheTomcat后,访问http://localhost如果能访问到Tomcat欢迎界面则配置成功。

 

 

  .运行后发现异常

     (OS 64)指定的网络名不再可用: AH00341: winnt_accept: Asynchronous AcceptEx failed.

      AcceptEx的错误原因:一些流行的Windows产品,比如防病毒软件或虚拟专用网络软件,会干扰AcceptEx()的正确操作。

      Apache2.4版本后对此做了解决措施:修改httpd.conf如下

       AcceptFilter http none
AcceptFilter htt
ps none
EnableSendfile Off --
使用操作系统内核的sendfile支持来将文件发送到客户端
EnableMMAP off      --
递送中使用内存映射来读取文件

       然后调整windows配置

       1.网上邻居-;本地连接-;属性-;internet协议(TCP/IP)-;属性-;高级-;wins标签;去掉启用LMhosts查询前的勾.

2.控制面版-;windows防火墙-;高级标签-;本地连接设置-;服务的标签里勾选安全Web服务器(HTTPS)

 类似资料: