8
回答
apache负载均衡请求过滤转发

老大,初次接触集群有一问题求教下,

我有两类URL请求

A:https://ip:port/keyA/....

B:  https://ip:port/keyB/....

我要实现的是apache接收到A类请求时,直接把请求转发给一固定的服务器比如(https://ip:prot/........);而按收到B类请求时,进入负载均衡

<proxy balancer://keyB>

       BalancerMermber https://......

       BalancerMermber https://......

       ......

</proxy> 

按照我配的分配规则转发给这些集群节点。     这个我该如何配置以达到这种效果?

举报
V
发帖于6年前 8回/3K+阅
共有8个答案 最后回答: 6年前
<VirtualHost ip:port>
  <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^/keyA/(.*)$ https://....keyA/$1 [R=301,L]
  </IfModule>

  ProxyPass / balancer://keyB/
  ProxyPassReverse / balancer://keyB/
  <Proxy balancer://keyB/>
    BalancerMember https:// loadfactor=50 route=inst1
    BalancerMember https:// loadfactor=50 route=inst2
  </Proxy>
</VirtualHost>

做个参考吧,主要还是看官方文档:http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

引用来自“yzjiang”的答案

<VirtualHost ip:port>
  <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^/keyA/(.*)$ https://....keyA/$1 [R=301,L]
  </IfModule>

  ProxyPass / balancer://keyB/
  ProxyPassReverse / balancer://keyB/
  <Proxy balancer://keyB/>
    BalancerMember https:// loadfactor=50 route=inst1
    BalancerMember https:// loadfactor=50 route=inst2
  </Proxy>
</VirtualHost>

做个参考吧,主要还是看官方文档:http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

首先感谢分享,问下你用的apache版本?偶用的是win平台下Version 2.0X的

且rewrite后地址变为真实服务器地址了,这就不符合游戏规则了,偶或哪里没配置正确?

 

 RewriteEngine on
#RewriteRule ^/$ https://ip/keyA
#RewriteRule ^/(.*) https://ip/keyA/$1
#RedirectMatch ^/ http://www.baidu.com  会导致地址URL直接变成百度的了
RedirectMatch ^/(.*) https://ip/keyA

--- 共有 1 条评论 ---
xmdeepdataapache 2.2 如果发现不生效,可能是没有Load Rewrite或者Proxy有关的Module,检查下 6年前 回复

引用来自“俞慧涛”的答案

 APACHE的这一个负载还真没有用过,NGINX的可以很方便的做到。
nginx偶也有在用,还望具体实现过程,不胜感激

差点给把这事忘了,一直在忙别的事情

稍作了下整理,以后用到时时供回头看看

首先,在apache安装目录/Apache2.2/conf下,打开配置文件httpd.conf,添加以下apache支持实现的Module:
LoadModule proxy_module modules/mod_proxy.so #服务代理支持
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so  #代理负载技持
LoadModule proxy_http_module modules/mod_proxy_http.so  #负载技持协议支持
ProxyRequests Off 
然后添加集群节点:
<proxy balancer://test> 
   BalancerMember http://192.9.11.234:8280 loadfactor=1 
   BalancerMember http://192.9.11.233:8280 loadfactor=1
# loadfactor=1 这里采用按权重分配,值可设1~100,这里设置的值代表一次请求给234节
# 点,一次给233节点,意即把请求平均分配给这两台服务器。
</proxy>
设置虚拟主机:
<VirtualHost *:80>
    ServerAdmin abc@hotmail.com
    ServerName abc@com
    ServerAlias abc@com
    ProxyPass / balancer://test/
    ProxyPassReverse / balancer://test/
</VirtualHost>

添加管理节点模块方便对负载中的各节点信息进行查看:
<Location /balancer-manager>   
     SetHandler balancer-manager 
     Order Allow,Deny
     Allow from all 
</Location>

配置好后的httpd.cnf文件添加配置部分如下:
#apache对应支持模块启用
LoadModule proxy_module modules/mod_proxy.so 
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so 
LoadModule proxy_http_module modules/mod_proxy_http.so 
ProxyRequests Off 
<proxy balancer://test> #集群节点列表
   BalancerMember http://192.9.11.234:8280 loadfactor=1 
   BalancerMember http://192.9.11.233:8280 loadfactor=1 
</proxy>
<VirtualHost *:80>#配置虚拟机,默认端口80
    ServerAdmin abc@hotmail.com
    ServerName abc@com
    ServerAlias abc@com
    ProxyPass / balancer://test/
    ProxyPassReverse / balancer://test/
</VirtualHost>
<Location /balancer-manager> #负载管理模块,一般用来管理集群节点
    SetHandler balancer-manager 
    Order Allow,Deny
    Allow from all 
</Location>

实际应用呢,做的是ssl的也就是要配成支持https的

对apache配置文件的改动包括httpd.conf及httpd-ssl.conf两个文件的配置。
	配置httpd.conf文件
进入apache安装目录apache2.2/conf/目录下,打开httpd.conf文件,找出这些参数代码:
……
#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_http_module modules/mod_proxy_http.so
#LoadModule ssl_module modules/mod_ssl.so
……
把这些参数前面的符号“#”去掉,意即启和这些参数。这些参数的作用是启用apache对应的一些支持模块。
	配置httpd-ssl.conf文件
进入apache安装目录apache2.2/conf/extra/目录,打开httpd-ssl.conf文件,编辑:
#找到<VirtualHost _default_:443>标签后在标签下加上如下参数代码
ProxyPass / balancer://test/ #注意这里的空格
ProxyPassReverse / balancer://test/#注意这里的空格
SSLProxyEngine on #这个参数记得一定要带上,要不会报不支持ssl服务
#找到</VirtualHost>标签后在标签下加上如下参数代码                                  
ProxyRequests Off 
<proxy balancer://test> #这里配置的是集群服务器节点
         BalancerMember https://192.9.11.234:9443 loadfactor=1 
         BalancerMember https://192.9.11.233:9443 loadfactor=1 
</proxy> 
两个文件都配置好后,启动apache服务器。若没有报错,说明配置通过,接下来就可以进行https格式访问测试。

 

配ssl的过程中需要做密钥,过程也整理了下

密钥生成

密钥生成共分三步进行,首先是生成csrpem文件,然后生成key文件,最后创建X.509证书。

   apenssl生成csrpem文件

进入apache安装目录apache2.2/conf/下,复制openssl.cnfapache2.2/bin/目录下,打开windows命令行,进入apache2.2/bin/目录,执行如下命令:

openssl req -config openssl.cnf -new -out server.csr -keyout server.pem

执行过程中需要用户指定一些参数信息,提示信息如下图所示:

图片超了两百K,不让传

这里需要用户指定的参数有:

“Enter PEM pass phrase:”输入密码值,不能少于四位。

Verifying – Enter PEM pass phrase:”再次确认密码,与上面密码一致。

Common Name(eg,YOUR name)[]:”这里输入的是负载均衡所在机器的IP。这里用的是本机来做负载均衡服务器,故与的是:localhost。其它有要求用户输入的选项直接回车键略过即可。

   apache生成没有密保的key文件

接着上一步,执行如下命令生成key

图片超了两百K,不让传

这里需要再次输入上一步的密码“123456”,输入后回车执行即可。

     创建X.509证书

接着上一步,执行如下命令创建X.509证书,过程如下:

图片超了两百K,不让传

证书生成后在apache2.2/bin/目录下会生成如下文件:

图片超了两百K,不让传

把其中的server.crtserver.key文件复制到apache2.2/conf/目录下即完成了apache证书生成配置。

顶部