https://github.com/gogo-easy/ngr/releases
NgRouter是基于OpenResty开发的API网关,继承了Nginx的高并发、低延迟的强大性能的同时,也提供诸如认证鉴权、限流、熔断、健康检查、动态上游发现等常用功能。通过集群化横向扩展多实例的部署方式,可作为企业级边缘网关承载百万级并发,也可根据环境的逻辑划分,每个逻辑单元部署一套,用于需要多环境管理的场景。
1.环境依赖安装
MySQL: >=5.6
Redis
NgRouter依赖的库为:perl >= 5.6.1、libpcre、libssl
yum -y install perl pcre-devel openssl-devel
centos编译,yum安装Openresty: https://abc.htmltoo.com/thread-45866.htm
安装luafilesystem: https://abc.htmltoo.com/thread-45867.htm
2.安装NgRouter
cd /opt
wget https://github.com/gogo-easy/ngr/archive/v1.0.3.tar.gz
tar -zvxf v1.0.3.tar.gz
初始化ngr配置数据库
用任意的MySQL客户端执行数据库初始化脚本,
a. initialize-dbscript-v1.0.3-full.sql
b. 脚本路径install_db_script/initialize-dbscript-version.sql(其中version替换成对应版本即可)。
# 为了方便安装,我们也提供了一键安装脚本,脚本路径为install_utils/install_script,执行即可:
cd ngr-1.0.3/install_utils/install_script/
sh ngr_install.sh
sh ngrAdmin_install.sh
# 使用一键化安装脚本,可免去openresty和luafilesystem的安装步骤。
配置ngr
拷贝/usr/local/ngr/conf/ngr.json到/etc/ngr/ngr.json中,
找到store_mysql部分及cache_redis部分,并修改MySQL及Redis的正确配置信息。
执行启动命令
ngr start
============================
安装网关Ngr
make install
安装网关控制台服务端NgrAdmin
make install-admin
NgRouter Gateway的配置说明-缺省配置路径为/etc/ngr/ngr.json
{
"profile": "local", //ENV Profile:local dev test fat uat prod
"service_name":"GatewayService", // 网关集群名称
"load_conf_delay" : 0, //网关配置加载延迟时间(以秒为单位)
"load_conf_interval" : 3, //网关配置加载周期(以秒为单位)
"load_ext_conf_interval" : 60, //网关外围配置加载周期(以秒为单位)
// 启用的插件
"plugins": [
"global_rate_limit",
"api_router",
"group_rate_limit",
"property_rate_limit",
"stat_dashboard",
"waf",
"anti_sql_injection",
"statsd_metrics",
"global_access_control"
],
// 网关配置储存数据库连接地址
"store_type": "mysql",
"store_mysql": {
"connect_config": {
"host": "127.0.0.1",
"port": 3306,
"database": "ngr",
"user": "ngr_local",
"password": "123456",
"max_packet_size": 1048576
},
"pool_config": {
"max_idle_timeout": 10000,
"pool_size": 3
},
"timeout": 5000,
"desc": "mysql configuration"
},
//cache连接信息
"cache_type":"redis",
"cache_redis":{
"mode":"standalone",
"connect_timeout":500,
"read_timeout": 2000,
"database":0,
"max_idle_time":1000,
"pool_size":20,
"host":"127.0.0.1",
"port":"6379"
},
//statsd 连接信息
"metrics_conf" : {
"host" : "127.0.0.1",
"port" : 8125,
"prefix" : "ngr"
},
// http client 基础配置
"http_client":{
"timeout":2000,
"max_idle_timeout":6000,
"pool_size":200
},
"application_conf":{
"service_type":"gateway_service",
"hosts":["gateway.local","127.0.0.1","localhost"],
"log_level": "error",
"access_log": "/var/log/ngr/gateway.local.access.log",
"error_log":"/var/log/ngr/gateway.local.error.log",
"worker_processes_count":"2",
"event_mode": "kqueue",
"worker_rlimit":"65535",
"worker_connections":"65535",
"dns_resolver":["10.0.146.215"],
"dns_resolver_valid":"300s",
"resolver_timeout":"3s",
"lua_code_cache":"on",
"lua_socket_pool_size":"20",
"rate_limit_counter_cache_data_size":"20m",
"global_config_cache_data_size":"100m",
"stat_dashboard_data_size":"2m",
"shared_dict_lock_data_size":"10m",
"worker_events_data_size":"20m",
"healthchecks_data_size":"20m",
"lua_max_pending_timers":"16384",
"lua_max_running_timers":"4096",
"real_ip_header":"X-Forwarded-For",
"real_ip_recursive":"on",
"trusted_ips":["112.124.159.0/24","116.211.163.0/24","116.211.164.0/24"],
"hosts_conf": [
{
"host": "gateway.local",
"log_level":"error",
"access_log":"/var/log/ngr/gateway.local.access.log",
"error_log":"/var/log/ngr/gateway.local.error.log",
"non_body":"true",
"listen_port":80,
"error_page_switch":"off",
"open_ssl":"off",
"ssl_certificate":"",
"ssl_certificate_key":"",
"add_headers":[],
"proxy_intercept_errors":"off",
"error_page_code":"400 404 408 411 412 413 414 417 500 502 503 504",
"proxy_next_upstream":"error timeout invalid_header http_503 http_404 http_502 http_504 non_idempotent",
"non_idempotent_retry_switch":"off"
},
{
"host": "127.0.0.1",
"log_level":"error",
"access_log":"/var/log/ngr/127.0.0.1.access.log",
"error_log":"/var/log/ngr/127.0.0.1.error.log",
"non_body":"true",
"listen_port":80,
"error_page_switch":"off",
"open_ssl":"off",
"ssl_certificate":"",
"ssl_certificate_key":"",
"add_headers":[],
"proxy_intercept_errors":"off",
"error_page_code":"400 404 408 411 412 413 414 417 500 502 503 504",
"proxy_next_upstream":"error timeout invalid_header http_503 http_404 http_502 http_504 non_idempotent",
"non_idempotent_retry_switch":"off"
},
{
"host": "localhost",
"log_level":"error",
"access_log":"/var/log/ngr/localhost.access.log",
"error_log":"/var/log/ngr/localhost.error.log",
"non_body":"true",
"listen_port":80,
"error_page_switch":"off",
"open_ssl":"off",
"ssl_certificate":"",
"ssl_certificate_key":"",
"add_headers":[],
"proxy_intercept_errors":"off",
"error_page_code":"400 404 408 411 412 413 414 417 500 502 503 504",
"proxy_next_upstream":"error timeout invalid_header http_503 http_404 http_502 http_504 non_idempotent",
"non_idempotent_retry_switch":"off"
}
]
}
}
NgRouterAdmin-缺省配置路径为/etc/ngrAdmin/ngr.json
{
"profile": "local",
"plugins": [
"global_rate_limit",
"api_router",
"group_rate_limit",
"property_rate_limit",
"stat_dashboard",
"waf",
"anti_sql_injection",
"statsd_metrics",
"global_access_control"
],
"store_type": "mysql",
"store_mysql": {
"connect_config": {
"host": "127.0.0.1",
"port": 3306,
"database": "ngr",
"user": "ngr_local",
"password": "123456",
"max_packet_size": 1048576
},
"pool_config": {
"max_idle_timeout": 10000,
"pool_size": 3
},
"timeout": 5000
},
"cache_type":"redis",
"cache_redis":{
"mode":"standalone",
"connect_timeout":500,
"read_timeout": 2000,
"database":0,
"max_idle_time":1000,
"pool_size":20,
"host":"127.0.0.1",
"port":"6379"
},
"application_conf":{
"service_type":"config_service",
"worker_processes_count":"auto",
"event_mode": "kqueue",
"worker_rlimit":"65535",
"worker_connections":"65535",
"lua_code_cache":"on",
"lua_socket_pool_size":"20",
"lua_max_pending_timers":"16384",
"lua_max_running_timers":"4096"
}
}配置说明
profile: 当前环境标志
plugins:插件管理列表
store_type,store_mysql:配置数据源连接信息
cache_type,cache_redis:缓存连接信息
service_type:服务类型,填写config_service
event_mode:事件处理模型,centos为epoll,macox为kqueue