Apache Module mod_proxy 的ProxyPass指令使用 参考 http://www.javacui.com/service/111.html。
其实这里要说的也不是不同节点,也可以是不同分发方式。因为之前 Win2003下Apache与Tomcat搭建集群环境(http://www.javacui.com/service/48.html)时,对于每个节点的方式,使用的基于AJP的方式方式,而不是HTTP的。如果是 Linux下apache+tomcat+jk集群(http://www.javacui.com/service/49.html),则可以定义不同的控制器,在Apache的mod_proxy模块中,定义不同的ProxyPass即可实现。
这里我们定义两个节点,节点8011上部署了一个WEB工程test,节点8021上部署了一个WEB工程test2,Apache分发时,我们让访问 /test2 的使用HTTP访问节点8021,让访问 /test 的访问AJP节点8011(注意其AJP端口是8019)。那么在Apache上的配置为:
配置文件 httpd-vhosts.conf:
NameVirtualHost *:8008
<VirtualHost *:8008>
ServerAdmin webmaster@wuxian.com
ServerName 192.168.1.111
ServerAlias 192.168.1.111 localhost
ProxyPass /test2 http://localhost:8021/test2
ProxyPassReverse /test2 http://localhost:8021/test2
ProxyPass /test/ balancer://cluster/ stickysession=jsessionid nofailover=On
ProxyPassReverse /test/ balancer://cluster/
ErrorLog "logs/lbtest-error.log"
CustomLog "logs/lbtest-access.log" common
</VirtualHost>
配置文件 httpd.conf 最底部,其实和原来一样,但是要在端口后面加访问的工程路径:
ProxyRequests Off
<proxy balancer://cluster>
BalancerMember ajp://127.0.0.1:8019/test/ loadfactor=1 route=jvm1
</proxy>
则访问8008的 test 和 test2 时,会如下:
可以看到,不同的请求是分发到了不同的节点上,基于不同的访问方式。
还要注意的是,配置的 /test 和 /test/ 是一样的吗?
其实不管一样不一样,只要你和后面的代理路径一致,就不会有问题。如果不一致,那这样的写法就会有区别了,具体自己实验下即可。