{"id":19257104,"url":"https://github.com/ffay/proxygateway","last_synced_at":"2025-04-06T06:13:35.777Z","repository":{"id":113439998,"uuid":"66707048","full_name":"ffay/proxygateway","owner":"ffay","description":"Proxy Gateway基于openresty（nginx lua module）开发，可以作为接口网关（api gateway）使用，整合业务模块接口，微服务治理聚合，通过web配置界面，能够轻松进行代理配置管理，支持负载均衡，服务器状态检测等","archived":false,"fork":false,"pushed_at":"2018-05-04T11:39:49.000Z","size":4553,"stargazers_count":375,"open_issues_count":13,"forks_count":180,"subscribers_count":35,"default_branch":"master","last_synced_at":"2025-03-30T05:09:44.436Z","etag":null,"topics":["apigateway","nginx","openresty","pgw","pgw-proxy-gateway","proxy"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ffay.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-08-27T09:36:00.000Z","updated_at":"2025-03-23T02:10:14.000Z","dependencies_parsed_at":null,"dependency_job_id":"700f7348-2d25-4660-8c9e-b4d41f86c60b","html_url":"https://github.com/ffay/proxygateway","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ffay%2Fproxygateway","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ffay%2Fproxygateway/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ffay%2Fproxygateway/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ffay%2Fproxygateway/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ffay","download_url":"https://codeload.github.com/ffay/proxygateway/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247441059,"owners_count":20939239,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apigateway","nginx","openresty","pgw","pgw-proxy-gateway","proxy"],"created_at":"2024-11-09T19:08:21.596Z","updated_at":"2025-04-06T06:13:35.755Z","avatar_url":"https://github.com/ffay.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"\r\n## Proxy Gateway\r\n\r\nProxy Gateway基于openresty（nginx lua module）开发，可以作为接口网关（api gateway）使用，整合业务模块接口，微服务治理聚合，通过web配置界面，能够轻松进行代理配置管理，支持负载均衡，服务器状态检测，后续简称PGW。包括以下特性\r\n\r\n- 支持多域名，可以配置多个出口域名，互不干扰\r\n- 代理分组（服务模块），可以按照业务模块进行分组\r\n- 负载均衡，可以给每组（每个业务模块）代理配置多台后端服务器，PGW会自动进行负载均衡\r\n- 服务器监控，将down掉的服务器自动剔除，恢复以后自动加入\r\n- 路径配置支持正则表达式对uri进行重写\r\n- 集群部署，PGW配置的MySQL数据库使用同一个就能达到集群效果，在任意一台PGW服务器上进行的配置都将在所有PGW服务器上生效\r\n- https配置，与nginx配置一致，修改nginx.conf文件\r\n- 高效，反向代理能力基本和原生nginx一致\r\n- 支持API级别的限流（可针对总访问量以及单个IP访问量进行限流）\r\n\r\n### 安装\r\n\r\n安装最新版本的openresty http://openresty.org/en/installation.html\r\n\r\nnginx.conf配置如下，如果按照默认路径（/usr/local/openresty/）安装，可以参考以下步骤\r\n\r\n```shell\r\ncd /usr/local/openresty/nginx\r\ngit clone https://github.com/ffay/proxygateway.git\r\n```\r\n\r\n然后把/usr/local/openresty/nginx/conf/nginx.conf 用源码中的nginx.conf替换即可\r\n\r\nhttps://github.com/ffay/proxygateway/blob/master/nginx.conf\r\n\r\n#### 配置manage.conf\r\n\r\n```\r\nserver {\r\n    listen 8081;\r\n    server_name localhost;\r\n    index index.html;\r\n    location /api/v1 {\r\n        access_by_lua_block{\r\n            local access = require \"manage.access\"\r\n            access.checkLogin()\r\n        }\r\n        content_by_lua_block{\r\n          local ctl = require \"manage.controller\"\r\n          ctl.run()\r\n        }\r\n    }\r\n\r\n    location /static {\r\n        #源码中html的实际路径\r\n        root /usr/local/openresty/nginx/proxygateway/html;\r\n    }\r\n\r\n    location / {\r\n        access_by_lua_block{\r\n            local access = require \"manage.access\"\r\n            access.checkLogin()\r\n        }\r\n        #源码中html的实际路径\r\n        root /usr/local/openresty/nginx/proxygateway/html;\r\n    }\r\n}\r\n```\r\n\r\n- 在PGW源码中  src/config.lua 进行管理员以及MySQL相关配置，如果需要使用限流功能，请正确配置redis\r\n- 在数据库中运行pgw.sql脚本\r\n- 启动openresty（openresty安装目录/nginx/sbin/nginx）\r\n- 在浏览器中打开 http://ip:8081 ，如果是集群部署，打开任意一台的PGW管理界面进行配置即可，登录即可进行域名以及分组代理等配置管理，其中添加的域名需要解析到相应PGW的ip，如果前端还有负载均衡器（例如aws或aliyun的load balancing），域名直接解析到负载均衡器ip即可\r\n\r\n### 管理配置\r\n\r\n- 域（域名）管理，可以任意添加多个域名，默认域 localhost 在该域下的配置，直接访问IP生效，PGW通过域名进行配置隔离，每个域名下的配置互不干扰，需要将域名解析到PGW的IP\r\n- 服务模块，每个域名下面可以添加多个服务模块，用于将接口按业务模块进行分组\r\n\r\n![模块管理](modules.png)\r\n\r\n- 后端服务器，每个服务模块下面可以配置多台后端服务器，可以为每台服务器指定权重，负载均衡时会按权重进行接口请求分发，支持http以及https代理\r\n\r\n![后端服务器管理](servers.png)\r\n\r\n- 代理路径（uri）配置，每个服务模块下可配置多个代理uri规则，配置规则类似nginx location的配置，配置实例\r\n\r\n![映射列表](uris.png)\r\n![映射配置](uri_config.png)\r\n\r\n\r\n|原始请求URI|后端服务URI|说明|\r\n|:----    |:---|:----- |\r\n|/ |/  |将所有对PGW某个域下的请求转发到后端服务器 |\r\n|/u |/user  |将所有对PGW某个域下/u开头的请求重写成/user后转发到后端服务器，例如，请求 /u/1001 转发到后端服务器为 /user/1001 |\r\n|/topic/([0-9]+)/([0-9]+)     |/topic?uid=$1\u0026tid=$2  |支持正则匹配，请求 /topic/1001/2002 转发到后端服务器为  /topic?uid=1001\u0026tid=2002  |\r\n|/t%?tid=(.*)    |/topic?tid=$1  |支持正则匹配,原始请求URI中如果有 ? 出现，需要在前面加上 %，用于转义问号 |\r\n\r\n所有接口映射配置必须以 / 开头，同一个域下面 原始请求URI 不能重复，原始请求URI **字符串越长匹配优先级越高**\r\n\r\n#### 后续\r\n\r\n- 认证检测\r\n- IP黑白名单\r\n- 数据统计\r\n- 欢迎提出更多功能\r\n\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fffay%2Fproxygateway","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fffay%2Fproxygateway","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fffay%2Fproxygateway/lists"}