PGW(Proxy Gateway)
Proxy Gateway基于openresty(nginx-lua-module)开发,可以作为接口网关(api gateway)使用,整合业务模块接口,微服务治理聚合,通过web配置界面,能够轻松进行代理配置管理,支持负载均衡,服务器状态检测。包括以下特性
支持多域名,可以配置多个出口域名,互不干扰
代理分组(服务模块),可以按照业务模块进行分组
负载均衡,可以给每组(每个业务模块)代理配置多台后端服务器,PGW会自动进行负载均衡
服务器监控,将down掉的服务器自动剔除,恢复以后自动加入
路径配置支持正则表达式对uri进行重写,例如 /user/([0-9]+)/profile /user/profile/$1,所有访问/user/用户id/profile 都将被映射到 /user/profile/用户id
集群部署,PGW配置的MySQL数据库使用同一个就能达到集群效果,在任意一台PGW服务器上进行的配置都将在所有PGW服务器上生效
https配置,与nginx配置一致,修改nginx.conf文件
高效,反向代理能力基本和原生nginx一致
安装
安装最新版本的openresty http://openresty.org/en/installation.html
nginx.conf配置如下,如果按照默认路径(/usr/local/openresty/)安装,可以参考以下步骤
cd /usr/local/openresty/nginx git clone https://github.com/ffay/proxygateway.git
然后把/usr/local/openresty/nginx/conf/nginx.conf 用源码中的nginx.conf替换即可
worker_processes 2; events { worker_connections 102400; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; lua_shared_dict cache 10m; #换成你的实际路径,这里将源码中src目录加入到 lua_package_path lua_package_path '/usr/local/openresty/nginx/proxygateway/src/?.lua;;'; #lua_code_cache off; upstream servers { server 127.0.0.1; balancer_by_lua_block{ local balancer = require "balancer" balancer.balancing() } } init_worker_by_lua_block{ require "init" } server { listen 80 default_server; server_name localhost; location / { set $backend_host '127.0.0.1'; set $backend_port 80; set $newhost ''; set $upstream 'http://servers'; access_by_lua_block{ local access = require "access" access.dispatch() } proxy_set_header Host $newhost; proxy_http_version 1.1; proxy_pass $upstream; } error_log logs/error.log; } #将源码中的 manage.conf 路径 include /usr/local/openresty/nginx/proxygateway/manage.conf; }
配置manage.conf
server { listen 8081; server_name localhost; index index.html; location /api/v1 { access_by_lua_block{ local access = require "manage.access" access.checkLogin() } content_by_lua_block{ local ctl = require "manage.controller" ctl.run() } } location /static { #源码中html的实际路径 root /usr/local/openresty/nginx/proxygateway/html; } location / { access_by_lua_block{ local access = require "manage.access" access.checkLogin() } #源码中html的实际路径 root /usr/local/openresty/nginx/proxygateway/html; } }
在PGW源码中 src/config.lua 进行管理员以及MySQL相关配置
在数据库中运行pgw.sql脚本
启动openresty(openresty安装目录/nginx/sbin/nginx)
在浏览器中打开 http://PGW的IP:8081 ,如果是集群部署,打开任意一台的PGW管理界面进行配置即可,登录即可进行域名以及分组代理等配置管理,其中添加的域名需要解析到相应PGW的ip,如果前端还有负载均衡器(例如aws或aliyun的load balancing),域名直接解析到负载均衡器ip即可
管理配置
域(域名)管理,可以任意添加多个域名,默认域 localhost 在该域下的配置,直接访问IP生效,PGW通过域名进行配置隔离,每个域名下的配置互不干扰,需要将域名解析到PGW的IP
服务模块,每个域名下面可以添加多个服务模块,用于将接口按业务模块进行分组
后端服务器,每个服务模块下面可以配置多台后端服务器,可以为每台服务器指定权重,负载均衡时会按权重进行接口请求分发,支持http以及https代理
代理路径(uri)配置,每个服务模块下可配置多个代理uri规则,配置规则类似nginx location的配置,配置实例
Request uri | Original uri | 说明 |
---|---|---|
/ | / | 将所有对PGW某个域下的请求转发到后端服务器 |
/u | /user | 将所有对PGW某个域下/u开头的请求重写成/user后转发到后端服务器,例如,请求 /u/1001 转发到后端服务器为 /user/1001 |
/topic/([0-9]+)/([0-9]+) | /topic?uid=$1&tid=$2 | 支持正则匹配,请求 /topic/1001/2002 转发到后端服务器为 /topic?uid=1001&tid=2002 |
/t%?tid=(.*) | /topic?tid=$1 | 支持正则匹配,Request uri中如果有 ? 出现,需要在前面加上 %,用于转义问号 |
所有接口映射配置必须以 / 开头,同一个域下面 Request uri 不能重复,Request uri字符串越长匹配优先级越高
演示地址
https://a.fengfei.org/ 用户名/密码 admin/admin
添加域名后,请将域名cname解析到 fengfei.org 然后可在你添加的域名下做代理配置
其中配置的一个google代理,欢迎测试 https://fengfei.org/
后续
认证检测
访问频率控制
IP黑白名单
数据统计
欢迎提出更多功能
移动性管理实体(MME) MME的主要功能是支持NAS(非接入层)信令及其安全、跟踪区域(TA)列表的管理、P-GW和S-GW的选择、跨MME切换时进行MME的选择、在向2G/3G接入系统切换过程中进行SGSN的选择、用户的鉴权、漫游控制以及承载管理、3GPP不同接入网络的核心网络节点之间的移动性管理(终结于S3节点),以及UE在ECM_IDLE状态下可达性管理(包括寻呼重发的控制和执行)。 Mo
今天看VOLTE信令流程手册中注册流程部分,提到MME根据APN配置和网络拓扑选择SGW和PGW,向S/PGW发送Create Session Request,请求建立数据APN缺省承载。 只写了MME根据APN配置和网络拓扑选择SGW和PGW,具体怎么根据还是没有说清楚。看了华为手册里面大概了解了,具体细节待进一步核实。 比如当前用户所在TAC为0x7188,则构建SGW域名 88.71.7
学习5G知识,势必要去阅读相关的技术标准,而纯英文的标准协议对于初学者来说是个门槛。 个人在学习5G标准3GPP TS 29244-g30过程中,也发现google的机器翻译实在晦涩难懂,所以个人在借助百度翻译(中国人更懂中文)的同时,人工对每句话进行了校对。 在自己学习的同时,也将翻译内容分享给给广大网友。由于个人能力有限,翻译不到位的地方还请各位网友们指正。 5.2.6 Combined SG
LTE核心网中,SGW、PGW、PCRF都有计费的功能,请问这几个网元的计费功能有什么区别与联系呢? http://www.mscbsc.com/askpro/response-346808.html http://wenwen.sogou.com/z/q700976459.htm tubulvxing 的答案 PCRF是策略和计费控制单元,起的是制定规则的功能,不负责具体计费。 S-GW负责跨
含义 (1) MME是一个信令实体,主要负责移动性管理、承载管理、用户的鉴权认证、SGW和PGW的选择等功能; (2) SGW终结和E-UTRAN的接口,主要负责用户面处理,负责数据包的路由和转发等功能,支持3GPP不同接入技术的切换,发生切换时作为用户面的锚点;对每一个与EPS相关的UE,在一个时间点上,都有一个SGW为之服务。SGW和PGW可以在一个物理节点或不同物理节点实现。 (3) PGW
主要内容:一、简介,二、Java对象头中的Mark Word,三、偏向锁,四、轻量级锁,五、重量级锁,六、自旋锁,七、锁升级过程一、简介 在讲解这些锁概念之前,我们要明确的是这些锁不等同于Java API中的ReentratLock这种锁,这些锁是概念上的,是JDK1.6中为了对synchronized同步关键字进行优化而产生的的锁机制。这些锁的启动和关闭策略可以通过设定JVM启动参数来设置,当然在一般情况下,使用JVM默认的策略就可以了。 二、Java对象头中的Mark Word HotSpo
问题内容: 根据我的经验,Maven在小型/实验性应用程序中常常是过大的。但是,依赖管理是Maven的一项非常有用的功能,实际上是唯一对上述应用程序类型真正有用的功能。 我想知道是否可以有一个 非常最小的轻量级 Eclipse-Maven集成,该集成 仅以 最简单的方式 仅 将Maven依赖项添加到Eclipse项目类路径中。 特别是我不想: 适用于任何Maven约定(包括项目布局召集人) 安装并
主要内容:使用普通函数创建 goroutine,使用匿名函数创建goroutine在编写 Socket 网络程序时,需要提前准备一个线程池为每一个 Socket 的收发包分配一个线程。开发人员需要在线程数量和 CPU 数量间建立一个对应关系,以保证每个任务能及时地被分配到 CPU 上进行处理,同时避免多个任务频繁地在线程间切换执行而损失效率。 虽然,线程池为逻辑编写者提供了线程分配的抽象机制。但是,如果面对随时随地可能发生的并发和线程处理需求,线程池就不是非常直观和方便了。能否
Jenkins Pipeline插件有一个称为“轻量级签出”的功能,其中主服务器仅从repo中提取Jenkinsfile,而不是整个repo。配置屏幕中有一个相应的复选框。我想在多分支管道中进行轻量级签出,但我在多分支配置屏幕中没有看到复选框。有什么想法如何实现这一点吗?我注意到一些关闭的问题表明此功能可用,但我无法找到任何有关如何实现它的细节。 相关资料: https://issues.jenk
我正在使用声明性语法的Jenkins Pipeline,目前有以下阶段: 准备 构建(两组平行的步骤) 测试(也是两组平行的步骤) 询问是否/在何处部署 部署 对于步骤1、2、3和5,我需要和代理(一个执行者),因为他们在工作区上做实际工作。对于步骤4,我不需要一个,并且我不希望在等待用户输入时阻止可用的执行器。对于经典的脚本语法,这似乎被称为“flyweight”或“lightweight”执行
问题内容: 我刚刚开发了自己的小型JDBC帮助程序库,并且我已经意识到它将成为维护方面的噩梦。 我不是在寻找像Hibernate这样的成熟ORM,它只是一种轻巧有用的工具,它可以快速使JDBC调用快速传递SQL语句,而不会弄乱被检查的异常,手动关闭资源等。 根据您的经验,您可以推荐一个不错的JDBC帮助程序库吗? 到目前为止,我已经看过了ApacheCommonsDbUtils,它看起来不错。还有