原文见:http://www.itlearner.com/article/3747
[导读 ]modrewite 将URL定向到另一个目录或文件,而地址栏URL不变,网页内容为新地址内容。 http://www.test.com/a/b 显示 http://www.test.com/test/的内容,URL地址还保持为 www.test.com/a/b根据下面操作自己可以更加灵活...
根据下面操作自己可以更加灵活变动
一、实现原理:
(主要看第2点)
只有当用户的WEB请求最终被导向到某台WEB服务器的Apache后台,则这台WEB服务器接受
进来的请求,根据配置文件该请求是主配置还是虚拟主机,再根据用户在浏览器中请求的
URI来配对重写规则并且根据实际的请求路径配对.htaccess中的重写规则。最后把请求
的内容传回给用户,该响应可能有两种:
让浏览器再次以新的URI发出请求(R=301或者R=302,临时的或是永久的重定向)
如:一个网站有正规的URL和别名URL,对别名URL进行重定向到正规URL,或者网站改换
成了新的域名
则把旧的域名重定向到新的域名(Redirect)
这是Apache内部根据重写后的URI内部通过代理模块请求内容并送回内容给客户,而客户
端浏览器并
不知道,浏览器中的URI不会被重写。但实际内容被Apache根据重写规则后的URI得到。
如:在公司防火墙上运行的Apache启动这种代理重写规则,代理对内部网段上的WEB服务
器的请求。
说明:为了不让地址URL被重写,而内容重定向,使用apache mod_proxy代理模块的反向代理功能实现。
Apache可以被配置为正向(forward)和反向(reverse)代理。
ProxyRequests On
ProxyVia On
Deny from all
Allow from internal.example.com
ProxyRequests Off
Allow from all
ProxyPassReverse /foo http://foo.example.com/bar
三、mod_rewrite的具体使用方法,我在这里就不多说了,请看这个链接:
http://bbs.chinaunix.net/viewthread.php?tid=66521&extra=page%3D2
cd apache2.0
./configure --enable-MODULE=shared --enable-so --with-mpm=worker --enable-
--enable-proxy=shared 加入mod_proxy模块
cd 源代码目录
find ./ -name mod_rewrite.c
cd PATH/to/mod_rewrite.c
/usr/local/apache2/bin/apxs -c mod_rewrite.c
/usr/local/apache2/bin/apxs -i -a -n mod_rewrite mod_rewrite.la
如果出现这个错误
Syntax error on line 329 of /usr/local/apache2/conf/httpd.conf:
Can`t loacte API module staructure `mod_rewrite_module` in file
修改http.conf
原来:httpd.conf里面写的mod_rewrite_module
改成 rewrite_module
如果重启apache出现这个错误module rewrite_module is built-in and can`t be loaded
表示模块是内建的,不用再调入
结束。
vi conf/httpd.conf
添加下面内容:
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
启用mod_proxy反向代理
<VirtualHost 192.168.0.203:80>
ServerAdmin test@test.com
DocumentRoot /test
ServerName www.test.com
ErrorLog logs/ip-error_log
RewriteEngine on
RewriteCond %{REQUEST_URI} /[^&]+/b/
RewriteCond %{REQUEST_URI} !/test/
RewriteCond %{HTTP_HOST} ^www.test.com [NC]
RewriteRule ^/(.*) http://www.test.com/test/ [P,L]
</VirtualHost>
web.xml 配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<distributable/> <!-- 实现session 复制 -->
</web-app>
发布项目
将项目发布到2个tomcat中。
Apache配置:(默认端口是80,会和iis冲突 )
1 修改Apache2.2\conf\httpd.conf文件配置,在文件中将 LoadModule 前的注释符号"#"去掉
# ====================================
LoadModule proxy_module modules/mod_proxy.so
# ====================================
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
# ====================================
LoadModule proxy_connect_module modules/mod_proxy_connect.so
# ====================================
LoadModule proxy_http_module modules/mod_proxy_http.so
# ====================================
2 修改Apache2.2\conf\httpd.conf文件配置在文件尾部追加
# ===============================
ProxyPass / balancer://proxy/ lbmethod=bytraffic
<Proxy balancer://proxy>
BalancerMember http://localhost:8080/ loadfactor=1
BalancerMember http://localhost:8081/ loadfactor=2
</Proxy>
# ===============================
说明:
#BalancerMember 后面的URL表示要配置的后台服务
#参数”loadfactor”表示后台服务器负载到由Apache发送请求的权值,该值默认为1
1)轮询均衡策略的配置
ProxyPass / balancer://proxy/
<Proxy balancer://proxy>
BalancerMember http://127.0.0.1:8080/
BalancerMember http://127.0.0.1:8081/
</Proxy>
实现负载均衡的原理如下:
假设Apache接收到http://localhost/test请求,由于该请求满足ProxyPass条件(其URL前缀为“/"),该请求会 被分发到后台某一个BalancerMember,譬如,该请求可能会转发到http://127.0.0.1:8080/进行处理?当第二 个满足条件的URL请求过来时,该请求可能会被分发到另外一台BalancerMember,譬如,可能会转发到 http://127.0.0.1:8081/如此循环反复,便实现了负载均衡的机制?
2)按权重分配均衡策略的配置
ProxyPass / balancer://proxy/
<Proxy balancer://proxy>
BalancerMember http://127.0.0.1:8080/ loadfactor=3
BalancerMember http://127.0.0.1:8081/ loadfactor=1
</Proxy>
参数"loadfactor"表示后台服务器负载到由Apache发送请 求的权值,该值默认为1,可以将该值设置为1到100之间的任何值?以上面 的配置为例,介绍如何实现按权重分配的负载均衡,现假设Apache收到4次http://localhost/loadBalancing/index.jsp请求,该请求分别被负载到后台 服务器,则有3次连续的这样请求被负载到BalancerMember为http://127.0.0.1:8080/的服务器,有1次这样的请求被 负载BalancerMember为http://127.0.0.1:8081/后台服务器?实现了按照权重连续分配的均衡策略?
3)权重请求响应负载均衡策略的配置
ProxyPass / balancer://proxy/ lbmethod=bytraffic
<Proxy balancer://proxy>
BalancerMember http://127.0.0.1:8080/ loadfactor=3
BalancerMember http://127.0.0.1:8081/ loadfactor=1
</Proxy>
参数“lbmethod=bytraffic"表示后台服务器负载请求和 响应的字节数,处理字节数的多少是以权值的方式来表示的? “loadfactor"表示后台服务器处理负载请求和响应字节数的权值,该值默认为1,可以将该值设置在1到100的任何值?根据以上配置是这么进行均 衡负载的,假设Apache接收到http://localhost/loadBalancing/index.jsp请求,将请求转发给后台服务器,如果BalancerMember为http://127.0.0.1:8080/后台服务器负载到这个请求,那么它处理请求和响应的字节数是BalancerMember为http://127.0.0.1:8081/服务器的3倍。也就是说(2)是以请求数作为权重负载均衡的,(3)是以流量为权重负载均衡的,这是最大的区别!
将以上配置完毕,运行apach,tomcat.在360浏览器和ie9浏览器中分别输入:
http://localhost/loadBalancing/index.jsp。(提交后,在刷新其他页面)
---------------------
原文:https://blog.csdn.net/chy2z/article/details/80080463