Skip to content

rpgmakervx/easyproxy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

logo

EasyProxy 是一个基于非阻塞IO的内存级反向代理、负载均衡中间件。中间件整体用Java实现,部署和配置非常简单,便于用户快速搭建一套负载均衡架构

中间件功能:

  • 基于http协议的反向代理/负载均衡
  • redis作为缓存介质
  • 四种负载均衡策略:轮询,带权轮询,源地址哈希,最小链接选择
  • 简单的http server
  • ip黑名单,图片防盗链,请求数据gzip压缩
  • 基于xml的静态配置,以及运行后通过rest api的动态配置

起步:

##准备工作: 首先请确保你的操作系统是linux的任意distribution,并且安装了redis2.4以上和hotspot jdk7以上

真实节点:

你要有两个或以上web服务器,它能够提供基础的http服务,这里我们那常用的tomcat来举例。这里先给出tomcat下载链接,建议使用7.0版本

解压缩两个tomcat分别叫tomcat1tomcat2,如果你只有一个节点,那么启动两台tomcat需要将他们配置成不同的端口。 这里我们假设一个端口是8080,一个是8081.tomcat默认端口是8080因此这里只需要配置tomcat2即可。

进入tomcat2conf目录,使用命令vim server.xml,编辑tomcat配置文件

<Connector port="8081" protocol="HTTP/1.1"
   connectionTimeout="20000"
   redirectPort="8443" />

Connector的属性 port就是tomcat端口号,改成8081即可。

为了能够看到负载均衡的效果,建议在每个tomcat的welcome page上标注当前的tomcat。

进入每个tomcat的/webapps/ROOT/,打开index.jsp页面,在页面顶部添加tomcat x, x代表tomcat的编号,也代表了真实节点

缓存:

目前版本只有redis作为缓存介质,redis相关配置不再介绍。

安装好后直接启动服务:redis-server.启动后使用redis-cli,输入命令ping,能够收到响应pong说明redis服务已经成功启动

easyproxy启动:

首先请配置easyproxy的localhost,node等相关信息如下:

<proxy>
    <property>
        <name>proxy.server.listen</name>
        <value>9524</value>
    </property>
    <property>
        <name>proxy.server.localhost</name>
        <value>127.0.0.1</value>
    </property>
    <property>
        <name>proxy.server.lb_strategy</name>
        <value>weight</value>
    </property>
    <property>
        <name>proxy.server.nodes</name>
        <value>192.168.89.1:8080:4,192.168.89.1:8081:6</value>
    </property>
    <property>
        <name>proxy.cache.ttl</name>
        <value>20</value>
    </property>
    <property>
        <name>proxy.cache.type</name>
        <value>redis</value>
    </property>
    <property>
        <name>proxy.resource.staticUri</name>
        <value>/static/.*</value>
    </property>
    <property>
        <name>proxy.resource.notfoundPage</name>
        <value>notfound.html</value>
    </property>
    <property>
        <name>proxy.resource.errorPage</name>
        <value>error.html</value>
    </property>
    <property>
        <name>proxy.resource.forbidPage</name>
        <value>forbidden.html</value>
    </property>
    <property>
        <name>proxy.resource.badRequestPage</name>
        <value>badrequest.html</value>
    </property>
    <property>
        <name>proxy.log.logopen</name>
        <value>true</value>
    </property>
    <property>
        <name>proxy.antileech.open</name>
        <value>false</value>
    </property>
    <property>
        <name>proxy.api.open</name>
        <value>true</value>
    </property>
    <property>
        <name>proxy.api.admin</name>
        <value>admin</value>
    </property>
    <property>
        <name>proxy.api.key</name>
        <value>admin123</value>
    </property>
    <property>
        <name>proxy.api.uri</name>
        <value>/easyproxy.*</value>
    </property>
    <property>
        <name>proxy.firewall.filter</name>
        <value>192.168.117.1,192.168.89.1</value>
    </property>
</proxy>

配置信息详情见用户指南

进入bin目录,运行 ./startup 启动服务

假设配置文件中localhost设置为127.0.0.1,打开浏览器输入http://127.0.0.1:9524/static/index.html,看到easyproxy的首页,说明服务启动成功。

此时确保你的两个tomcat都是启动的,浏览器输入:http://127.0.0.1:9524 能看到tomcat的默认页面,说明反向代理效果成功。 多次请求这个地址会看到页面上的编号在发生变化,说明多次请求被路由到了不同的tomcat上,达到请求负载均衡的目的

用户指南

目录结构说明:

  • bin: 存放easyproxy的启动和停机脚本以及easyproxy核心代码。
  • conf: easyproxy相关配置文件。
  • lib: 依赖的第三方库或其他模块。
  • tmp: 存放临时文件
  • resources: 存放静态资源
  • logs: 存放日志

配置文件说明:

解压安装包后,进入conf目录,使用 vim proxy.xml 来编辑配置文件

proxy.xml 采用“类json”的方式进行配置,每个标签的attribute都不会重名,下面简单介绍xml的配置信息

负载均衡器相关

  • proxy.server.listen: easyproxy监听的端口。
  • proxy.server.localhost: 设置主机ip地址或域名。
  • proxy.server.lb_strategy: 负载均衡策略关键字(轮询:roundrobin,带权轮询:weight_roundrobin,源地址哈希:source_iphash,最小链接分配:least_connection)。

真实节点相关

  • proxy.server.nodes.ip: 真实节点ip地址
  • proxy.server.nodes.port: 真实节点端口号
  • proxy.server.nodes.weight: 真实节点的权重

缓存相关

  • proxy.cache.type: 缓存介质(目前只有redis)。
  • proxy.cache.ttl: 缓存失效时间。

静态资源相关

  • proxy.resource.static_uri: 静态资源uri(标准正则表达式写法)。
  • proxy.resource.notfound_page: 404页面文件名。
  • proxy.resource.error_page: 50x页面文件名。
  • proxy.resource.forbidden_page: 403页面文件名。
  • proxy.resource.bad_request: 400页面文件名。

日志相关

  • proxy.log.logopen: 是否开启access.log记录。

rest api相关

  • proxy.api.open: 是否开启easyproxy的rest api(api可以)。
  • proxy.api.uri: rest api的正则表达式

ip黑名单相关

  • proxy.firewall.filter:被拉黑的ip地址

2016.12.18 新增 properties 配置文件说明:

负载均衡器相关

  • proxy.server.listen: easyproxy监听的端口
  • proxy.server.lb_strategy: 负载均衡策略关键字(轮询:roundrobin,带权轮询:weight_roundrobin,源地址哈希:source_iphash,最小链接分配:least_connection)。

真实节点相关

  • proxy.server.nodes.ip: 真实节点ip地址
  • proxy.server.nodes.port: 真实节点端口号
  • proxy.server.nodes.weight: 真实节点的权重

缓存相关

  • proxy.cache.open: 缓存是否开启
  • proxy.cache.cache_ttl: 缓存失效时间
  • proxy.cache.type: 缓存介质(目前只有redis)。

静态资源相关

  • proxy.resource.static_uri: 静态资源uri(标准正则表达式写法)。
  • proxy.resource.notfound_page: 404页面
  • proxy.resource.bad_request: 400页面
  • proxy.resource.forbidden_page: 403页面
  • proxy.resource.error_page: 50x页面

日志相关

  • proxy.log.logopen: 日志是否开启

防盗链相关

  • proxy.antileech.open=false

应用防火墙相关

  • proxy.firewall.open=false
  • proxy.firewall.filter=192.168.117.1,192.168.0.110

easyproxy控制台:

web目录下执行脚本 ./startup 便可运行easyproxy的控制台,端口 9000

打开浏览器访问页面: http://localhost:9000/index 即可看到控制台界面。

操作指南

1.配置中心:修改负载均衡器的属性或相关配置信息,例如负载均衡策略,负载节点增减等

2.性能监控:监控负载均衡器所在节点或子节点健康状况等。(开发中)

3.日志分析:通过access log 分析每日请求量,来源地址和客户端等信息。(开发中)

Thanks:

感谢 大魔王 提供技术思路和部分方案