反向代理模块,是比较常用的模块,这里要说明下正向代理和反向代理的区别。
反向代理和正向代理的区别
我们以在国内访问 Google 搜索引擎为例:
-
浏览器输入地址为 www.google.com,同时配置代理服务器 10.1.1.1 ,那么 10.1.1.1 叫做正向代理。
在这种模式下,客户端浏览器不直接访问Google,而是委托给中间服务器 10.1.1.1 ,让这个中间服务器代替客户端访问Google。对于客户端浏览器来说,需要指定代理服务器地址,同时也需要知道目标网站地址。
-
浏览器输入地址为 www.googleproxy.com,那么 www.googleproxy.com 叫做反向代理。
在这种模式下,客户端浏览器访问的是 www.googleproxy.com,而不是 www.google.com;www.googleproxy.com 收到的任何请求,都被他内部请求到了 www.google.com 然后把内容返回给客户端,有点镜像的味道(就像这些内容原本就是它自己的一样)。
从上面两个例子可以看出,正向代理,对于服务器来说,隐藏了客户端地址;而反向代理,对于客户端来说,隐藏了真实的服务器地址。
实战
这是一组应用服务器:
http://192.168.0.2:8080/sso
http://192.168.0.3:8080/dss
http://192.168.0.3:8082/dss
http://192.168.0.4:8082/dss
这些服务器之间是相互联通的,但是只有 192.168.0.2 这台服务器的 80 端口 客户才能正常访问,其他地址客户均无法访问,怎么办?dss 的应用压力比较大,我希望做个集群负载均衡,该怎么配置?
没错,我们可以使用 mod_proxy 来解决这些问题
- 在 192.168.0.2 上正确安装 apache,并监听在 80 端口上
- 找到
httpd.conf
,将删除每行前面的 #
,使得这些模块能正常加载
#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
- 在
httpd.conf
,增加以下配置,把这些配置独立为一个 proxy.conf
文件,然后在httpd.conf
通过Include
指令加载进来是一个不错的注意。
ProxyRequests Off
#将sso的请求转化为内部代理请求 到http://192.168.0.2:8080/sso
ProxyPass /sso http://192.168.0.2:8080/sso
ProxyPassReverse /sso http://192.168.0.2:8080/sso
#将dss的请求转发为一个负载均衡的请求
ProxyPass /dss balancer://ssocluster lbmethod=byrequests stickysession=JSESSIONID nofailover=Off
ProxyPassReverse / balancer://ssocluster
<Proxy balancer://ssocluster>
BalancerMember http://192.168.0.3:8080/dss loadfactor=20 route=jvm38080
BalancerMember http://192.168.0.3:8082/dss loadfactor=20 route=jvm38082
BalancerMember http://192.168.0.4:8082/dss loadfactor=60 route=jvm48082
</Proxy>
下面对这些关键的指令进行说明
-
ProxyPass apache 收到客户端发起的以 /sso
开始的URL请求时,自动转化为一个内部请求到 http://192.168.0.2:8080/sso
的请求
-
ProxyPassReverse 当 apache 收到一个被代理的服务器发起的以 http://192.168.0.2:8080/sso
开始的重定向 URL 时,apache 自动 转化为用户请求的 URL,客户端收到的地址为重定向至 http://192.168.0.2/sso
,这里有个好处就是,如果 apache 具备多个IP地址,当不同的用户通过不同的IP访问apache时,他总是能重写至用户所请求的IP上。
-
stickysession 是通过名称为JSESSIONID
的 cookies 来保持这个用户的请求总是保留在一个tomcat上。
-
BalancerMember 为一个集群的成员
- loadfactor 集群成员所担负请求的权重,20的意思是 20% 的请求代理到该 tomcat 上;
- route 集群成员 tomcat 配置文件中所指定的
jvmRoute
,举例:如果客户端发起了一个/dss
的请求,cookies中的JSESSIONID
为640773D3EE234F0153E40B848A392038.jvm38080
,则 apache 会代理到到 http://192.168.0.3:8082/dss 上,这样子保证了用户的会话总是保持在一个tomcat上,而不会因为随机选择一个集群成员 tomcat 导致客户端重复登录(当然可以避免,需要做到多个tomcat的session共享)。
集群中的一个 tomcat 宕机后,客户端发起的请求会自动代理到其他正常的服务器上,客户端对宕机无感知
分享到:
相关推荐
mod_proxy_http mod_rewrite mod_setenvif mod_so mod_speling mod_ssl mod_status mod_suexec mod_unique_id mod_userdir mod_usertrack mod_version mod_vhost_alias mpmt_os2(MPM) Apache MPM 公共指令 mpm_...
mod_cache以及它的支持模块mod_mem_cache和mod_disk_cache提供了智能的HTTP缓冲。内容(content)本身被存储在缓冲区中,mod_cache的目的在于管理控制内容缓冲能力的各种HTTP头和选项。它可以同时处理本地的内容
WebLogic Web Server Plugins 12c now supports Apache 2.4.x Web Server and can proxy WebSocket applications deployed within WebLogic Server 12.1.2+ when configured with Apache 2.2.x and 2.4.x Web ...
LoadModule proxy_http_module modules/mod_proxy_http.so 去掉 Include conf/extra/httpd-vhosts.conf的注释 2. 配置httpd-vhosts.conf 内容如下 *:80> ServerName uambank.6677bank.com ProxyPass / ...
在Apache中通过mod_proxy_ajp模块发送AJP数据,另外一端的服务器需要实现AJP协议,能够接受mod_proxy_ajp模块发送的AJP协议数据,在接受到AJP协议数据后做适当处理,并能够将处理结果以AJP协议方式发送回给mod_proxy_...
首先,加载相应的代理模块,去掉以下模块前面的#号:LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_ajp_module modules/mod_proxy_ajp.soLoadModule proxy_balancer_module modules/mod_proxy_...
我在改造APACHE服务器授权访问时,需要对不合法的客户端请求进行过滤。对不合法请求需要立即发送一个错误提示页面给客户端。 发送错误提示页面的程序片断如下: //非法请求作错误跳转 char *location...
Apache mod_rewrite 模块 Apache mod_setenvif 模块 用法 将此文件夹复制到前端服务器的文档根目录,并最好将文件夹称为“代理”。 适配settings.conf.php文件,自定义以下变量 // The URL of the backend server...
玻璃鱼课程 ##日程 网络架构 * 关于 GlassFish 的基础知识 * 集群的使用 应用程序部署策略 审计和监控 负载平衡管理器 冗余多节点架构 (HADB) 持久会话 ... 将 Mod_jk 模块安装到 Apache HTTPD
当我们将应用部署到 tomcat 之后,默认是通过 http://codebelief.com:8080/myapp/ 这种形式来访问的。 很显然,这只适用于调试的情况,在实际使用时,我们通常会为...首先,需要确保开启 mod_proxy 模块: $ sudo a2e
配置Apache mod_proxy和Jetty 配置Jetty中的AJP13 在JBoss中配置Jetty Remote Glassfish EJBs from Jetty Jetty and Spring EJB3 (Pitchfork) JBoss EJB3 ObjectWeb EasyBeans (aka JOnAS EJB3Container) 集群技术 ...