FastGateway 一个可以用于代替Nginx的网关
在我本人研究Yarp的时候经常用于公司项目的业务网关代理,这时候就个大佬问我是否可以实现动态加载HTTPS证书?那时候我说不太可能实现,然而在某一天我看到
微软使用Yarp代替了Nginx吞吐量提升了百分之八十!

这个时候我就萌生了自己使用yarp造一个Gateway的项目,应为我本身也经常使用nginx作为网关,但是nginx的使用总得写conf,然后重启我的nginx,并且还需要配置证书重启,我就在想是否可以实现界面管理,并且完全动态管理?
然后我们的FastGateway项目就诞生了,下面我们介绍一下我们的FastGateway的项目简单案例
FastGateway
我们的FastGateway提供了俩个容器,一个是代理服务,一个是前端服务
一般简单使用就可以直接使用我们的docker-compose构建,非常简单
FastGateway支持哪些功能?
登录授权
- 通过环境变量简单设置账号密码
动态路由管理
- 完全界面操作并且实时更新
动态配置证书管理
- 完全界面操作并且实时更新
dashboard监控
- 提供了简单数据监控,后续还会提供更完善的功能
静态文件服务代理
- 使用中间件简单实现了静态文件代理(Yarp默认是不支持静态文件代理)
穿透隧道功能
- 只需要提供一个公网的Gateway服务端,然后下载我们的Gateway的客户端就可以将客户端的局域网的服务映射到外网(只支持http协议的服务)
出入口流量监控
- 基于Kestrel实现出入口流量监控,还提供当前服务器的所有网卡的出入流量实时监控
技术栈
后端技术栈
- Asp.Net 8.0 用于提供基础服务
- Yarp 用于提供反向代理服务
- FreeSql 用于提供数据库服务
- JWT 用于提供登录授权服务
- MiniApis 提供WebApi服务
前端技术栈
- reset-css 用于重置浏览器默认样式
- axios 用于发送http请求
- semi 用于提供基础组件
- react-router-dom 用于路由管理
镜像执行指令
mkdir data
docker run -d --restart always --name gateway-api -p 8000:8000 -p 8200:8080 -p 8300:8081 -v $(pwd)/data:/data/ registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-api
docker run -d --restart always --privileged --name gateway-web -p 10800:80 -e api_url=http://localhost:8000 registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-web
Docker-Compose文件
services:
gateway-api:
image: registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-api
restart: always
container_name: gateway-api
environment:
USER: root
PASS: Aa010426.
ports:
- 8000:8000 # 提供给web端调用的管理接口
- 8200:8080 # Http代理端口
- 8300:8081 # Https代理端口
volumes:
- ./data:/data/ # 请注意手动创建data目录,负责在Linux下可能出现权限问题导致无法写入
gateway-web:
image: registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-web
restart: always
build:
context: ../web
dockerfile: Dockerfile
privileged: true
environment:
api_url: http://localhost:8000
ports:
- 10800:80
如果并没有提供账号密码则默认
账号:root
密码:Aa010426.
替换默认的https证书
由于需要使用https,为了方便系统默认提供了一个pfx证书,如果你需要提供的话可以按照以下操作进行,如果是Docker执行的话证书的目录则是 /app/certificates/gateway.pfx
services:
gateway-api:
image: registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-api
restart: always
container_name: gateway-api
ports:
- 8000:8000 # 提供给web端调用的管理接口
- 8200:8080 # Http代理端口
- 8300:8081 # Https代理端口
environment:
USER: root
PASS: Aa010426.
HTTPS_PASSWORD: dd666666
HTTPS_FILE: gateway.pfx
ports:
- 8200:8080
volumes:
- ./data:/data/
- ./app/certificates:/app/certificates
gateway-web:
image: registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-web
restart: always
container_name: gateway-web
privileged: true
environment:
api_url: http://localhost:8000
ports:
- 10800:80
参考上面的docker-compose文件,我们提供了俩个环境变量HTTPS_PASSWORD,HTTPS_FILE,
HTTPS_FILE:
- 在系统中已经指定了容器的
/app/certificates目录,你只想要挂在目录中的文件名即可
HTTPS_PASSWORD:
- Pfx证书的密码,如果修改了证书请填写证书的密码。
/app/certificates:
- 这个是系统证书默认存放目录,如果映射了目录则需要提供自己的证书。
使用隧道
services:
gateway-api:
image: registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-api
restart: always
container_name: gateway-api
environment:
USER: root
PASS: Aa010426.
HTTPS_PASSWORD: dd666666
TUNNEL_PASSWORD: dd666666
HTTPS_FILE: gateway.pfx
ports:
- 8000:8000 # 提供给web端调用的管理接口
- 8200:8080 # Http代理端口
- 8300:8081 # Https代理端口
volumes:
- ./data:/data/
- ./app/certificates:/app/certificates
gateway-web:
image: registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-web
restart: always
container_name: gateway-web
privileged: true
environment:
api_url: http://localhost:8000
ports:
- 10800:80
增加TUNNEL_PASSWORD环境变量,默认为空不设置密码
下载隧道客户端 https://gitee.com/hejiale010426/Gateway/releases 然后解压压缩包,打开appsettings.json文件修改Tunnel节点的Url,如果Gateway使用了TUNNEL_PASSWORD,那么你的URL应该是https://localhost:8081/api/gateway/connect-h2?host=backend1.app&password=dd666666, host是在集群中的集群端点的域名,这个域名就是定义到我们的隧道客户端的host的这个参数,请保证值的唯一性,当绑定集群的路由匹配成功以后则会访问图片定义的端点,如果并没有存在节点那么他会直接代理。

出入流量监控
使用环境变量控制是否启用流量监控,使用环境变量ENABLE_FLOW_MONITORING设置我们是否启用流量监控,如果为空则默认启动流量监控,然后可以打开我们的控制面板查看流量监控的数据。
services:
gateway-api:
image: registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-api
restart: always
container_name: gateway-api
environment:
USER: root
PASS: Aa010426.
HTTPS_PASSWORD: dd666666
HTTPS_FILE: gateway.pfx
ENABLE_FLOW_MONITORING: true
ports:
- 8000:8000 # 提供给web端调用的管理接口
- 8200:8080 # Http代理端口
- 8300:8081 # Https代理端口
volumes:
- ./data:/data/
- ./app/certificates:/app/certificates
gateway-web:
image: registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-web
restart: always
container_name: gateway-web
privileged: true
environment:
api_url: http://localhost:8000
ports:
- 10800:80
效果图



FastGateway 一个可以用于代替Nginx的网关的更多相关文章
- 用Docker搭建一个支持https的nginx代理服务
用Docker搭建一个支持https的nginx代理服务 说明:本文所提的服务只是作者平常测试使用,可能含有未知bug或不成熟的解决方案,仅供参考,请不要用于正式环境,当然,使用过程中有任何问题欢迎提 ...
- 此地址使用了一个通常用于网络浏览以外的端口。出于安全原因,Firefox 取消了该请求
FirFox打开80以外的端口,会弹出以下提示: “此地址使用了一个通常用于网络浏览以外的端口.出于安全原因,Firefox 取消了该请求.”. 解决方法如下: 在Firefox地址栏输入about: ...
- 火狐----此地址使用了一个通常用于网络浏览以外的端口。出于安全原因,Firefox 取消了该请求。
FirFox打开80以外的端口,会弹出以下提示: “此地址使用了一个通常用于网络浏览以外的端口.出于安全原因,Firefox 取消了该请求.”.经网上搜索,解决方法如下: 在Firefox地址栏输入a ...
- 火狐无法访问本机IIS部署的网站,弹出:此地址使用了一个通常用于网络浏览以外目的的端口.出于安全原因,Firefox 取消了该请求 的解决办法
关于火狐浏览器访问本机IIS部署的网站弹出“此地址使用了一个通常用于网络浏览以外目的的端口.出于安全原因,Firefox 取消了该请求”这个错误(错误截图如下): 解决方法如下: 1.打开火狐浏览器, ...
- 此地址使用了一个通常用于网络浏览以外目的的端口。出于安全原因,Firefox 取消了该请求。
火狐无法访问本机IIS部署的网站,弹出:此地址使用了一个通常用于网络浏览以外目的的端口.出于安全原因,Firefox 取消了该请求 的解决办法 关于火狐浏览器访问本机IIS部署的网站弹出"此 ...
- fastText一个库用于词表示的高效学习和句子分类
fastText fastText 是 Facebook 开发的一个用于高效学习单词呈现以及语句分类的开源库. 要求 fastText 使用 C++11 特性,因此需要一个对 C++11 支持良好的编 ...
- 树莓派变成一个Web服务器: nginx + php + sqlite
将树莓派变成一个Web服务器,通过访问网页,就可以控制树莓派,比如:查看摄像头\开灯等等. 一想到Linux Web服务器,我们首先想到的是,Apache + MySql + Php. 树莓派可以安装 ...
- 一个简单可参考的API网关架构设计
网关一词较早出现在网络设备里面,比如两个相互独立的局域网段之间通过路由器或者桥接设备进行通信, 这中间的路由或者桥接设备我们称之为网关. 相应的 API 网关将各系统对外暴露的服务聚合起来,所有要调用 ...
- linux搭建一个配置简单的nginx反向代理服务器 2个tomcat
1.我们只要实现访问nginx服务器能跳转到不同的服务器即可,我本地测试是这样的, 在nginx服务器里面搭建了2个tomcat,2个tomcat端口分别是8080和8081,当我输入我nginx服务 ...
- 记一个http-proxy-middleware 代理访问nginx映射的接口不通过的问题(connection close)
工作过程中遇见一个问题,使用Vue-cli 搭建了一个工程,由于跨域的问题 使用了自带的dev-server Express Server(A后台) http-proxy-middleware 去访问 ...
随机推荐
- Liunx常用操作(十)-VI编辑器-命令模式命令
vI编辑器三种模式 分别为命令模式.输入模式.末行模式.
- ReentrantLock 可重入锁总结
本文为博主原创,未经允许不得转载: ReentrantLock 是一种内置锁,也叫可重入锁(ReentrantLock),它允许线程再次获取已持有的同步锁,这样防止死锁的发生.在使用Reentrant ...
- Angular系列教程之MVC模式和MVVM模式
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...
- kind-微k8s-测试与开发
0. kind 简介 开发与测试场景: 通过docker容器来模拟k8s节点 Github:https://github.com/kubernetes-sigs/kind 1. Kind 安装 os: ...
- [转帖]TiDB调优小结
https://www.jianshu.com/p/d5ee4dca66d8 TiDB概览 先来一段官网的描述 TiDB server:无状态SQL解析层,支持二级索引,在线ddl,兼容MyS ...
- [转帖]028.PGSQL-用户创建、表空间创建、数据库创建、schema创建、表创建、生成测试数据、指定搜索路径、
https://www.cnblogs.com/star521/p/15054341.html 登录数据库 su postgres #注意这里postgers 前后都有空格 psql -U post ...
- Redis lua脚本简要学习
Redis lua脚本简要学习 背景 上周督促客户从Windows平台升级到了Linux平台. redis一周相安无事. 但是这周一突然又出现了卡断和慢的情况. 只能继续进行分析. 分析思路 现场日志 ...
- Sysbench 开启超线程/关闭超线程以及容器运行数据库的性能损耗
Sysbench 开启超线程/关闭超线程性能损耗 摘要 Stress-NG 测试完之后 突然想 使用sysbenchen也进行一次压测 验证一把 超线程对数据的性能影响. 压测命令 ./sysbenc ...
- Springboot下micrometer+prometheus+grafana进行JVM监控的操作过程
Springboot下micrometer+prometheus+grafana进行JVM监控的操作过程 背景 同事今天提交了一个补丁. 给基于Springboot的产品增加了micrometer等收 ...
- css伪类和伪元素在项目中的使用-红色*显示
CSS使用伪类给表单添加星号 <style type="text/css"> .form-item label::before { content: '*'; colo ...