经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Nginx » 查看文章
FastGateway 一个可以用于代替Nginx的网关
来源:cnblogs  作者:tokengo  时间:2024/2/5 10:08:33  对本文有异议

在我本人研究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 用于路由管理

镜像执行指令

  1. mkdir data
  2. 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
  3. 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文件

  1. services:
  2. gateway-api:
  3. image: registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-api
  4. restart: always
  5. container_name: gateway-api
  6. environment:
  7. USER: root
  8. PASS: Aa010426.
  9. ports:
  10. - 8000:8000 # 提供给web端调用的管理接口
  11. - 8200:8080 # Http代理端口
  12. - 8300:8081 # Https代理端口
  13. volumes:
  14. - ./data:/data/ # 请注意手动创建data目录,负责在Linux下可能出现权限问题导致无法写入
  15. gateway-web:
  16. image: registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-web
  17. restart: always
  18. build:
  19. context: ../web
  20. dockerfile: Dockerfile
  21. privileged: true
  22. environment:
  23. api_url: http://localhost:8000
  24. ports:
  25. - 10800:80

如果并没有提供账号密码则默认

账号:root

密码:Aa010426.

替换默认的https证书

由于需要使用https,为了方便系统默认提供了一个pfx证书,如果你需要提供的话可以按照以下操作进行,如果是Docker执行的话证书的目录则是 /app/certificates/gateway.pfx

  1. services:
  2. gateway-api:
  3. image: registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-api
  4. restart: always
  5. container_name: gateway-api
  6. ports:
  7. - 8000:8000 # 提供给web端调用的管理接口
  8. - 8200:8080 # Http代理端口
  9. - 8300:8081 # Https代理端口
  10. environment:
  11. USER: root
  12. PASS: Aa010426.
  13. HTTPS_PASSWORD: dd666666
  14. HTTPS_FILE: gateway.pfx
  15. ports:
  16. - 8200:8080
  17. volumes:
  18. - ./data:/data/
  19. - ./app/certificates:/app/certificates
  20. gateway-web:
  21. image: registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-web
  22. restart: always
  23. container_name: gateway-web
  24. privileged: true
  25. environment:
  26. api_url: http://localhost:8000
  27. ports:
  28. - 10800:80

参考上面的docker-compose文件,我们提供了俩个环境变量HTTPS_PASSWORDHTTPS_FILE

HTTPS_FILE

  • 在系统中已经指定了容器的/app/certificates目录,你只想要挂在目录中的文件名即可

HTTPS_PASSWORD

  • Pfx证书的密码,如果修改了证书请填写证书的密码。

/app/certificates

  • 这个是系统证书默认存放目录,如果映射了目录则需要提供自己的证书。

使用隧道

  1. services:
  2. gateway-api:
  3. image: registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-api
  4. restart: always
  5. container_name: gateway-api
  6. environment:
  7. USER: root
  8. PASS: Aa010426.
  9. HTTPS_PASSWORD: dd666666
  10. TUNNEL_PASSWORD: dd666666
  11. HTTPS_FILE: gateway.pfx
  12. ports:
  13. - 8000:8000 # 提供给web端调用的管理接口
  14. - 8200:8080 # Http代理端口
  15. - 8300:8081 # Https代理端口
  16. volumes:
  17. - ./data:/data/
  18. - ./app/certificates:/app/certificates
  19. gateway-web:
  20. image: registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-web
  21. restart: always
  22. container_name: gateway-web
  23. privileged: true
  24. environment:
  25. api_url: http://localhost:8000
  26. ports:
  27. - 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=dd666666host是在集群中的集群端点的域名,这个域名就是定义到我们的隧道客户端的host的这个参数,请保证值的唯一性,当绑定集群的路由匹配成功以后则会访问图片定义的端点,如果并没有存在节点那么他会直接代理。

出入流量监控

使用环境变量控制是否启用流量监控,使用环境变量ENABLE_FLOW_MONITORING设置我们是否启用流量监控,如果为空则默认启动流量监控,然后可以打开我们的控制面板查看流量监控的数据。

  1. services:
  2. gateway-api:
  3. image: registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-api
  4. restart: always
  5. container_name: gateway-api
  6. environment:
  7. USER: root
  8. PASS: Aa010426.
  9. HTTPS_PASSWORD: dd666666
  10. HTTPS_FILE: gateway.pfx
  11. ENABLE_FLOW_MONITORING: true
  12. ports:
  13. - 8000:8000 # 提供给web端调用的管理接口
  14. - 8200:8080 # Http代理端口
  15. - 8300:8081 # Https代理端口
  16. volumes:
  17. - ./data:/data/
  18. - ./app/certificates:/app/certificates
  19. gateway-web:
  20. image: registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-web
  21. restart: always
  22. container_name: gateway-web
  23. privileged: true
  24. environment:
  25. api_url: http://localhost:8000
  26. ports:
  27. - 10800:80

效果图

开源地址:FastGateway: FastGateway 一个超级简单方便的网关,基于Kestrel+Yarp实现的网关。 支持动态配置路由,支持动态配置集群,支持动态配置HTTPS证书,无需重启即可使用。 (gitee.com)

原文链接:https://www.cnblogs.com/hejiale010426/p/18004526

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号