Nginx官方文档(四十七)【ngx_stream_js_module|ngx_stream_keyval_module|ngx_stream_limit_conn_module】
ngx_stream_js_module
- 示例配置
- 指令
- js_access
- js_filter
- js_include
- js_preread
- js_set
- 会话对象属性
ngx_stream_js_module
模块用于在 njs 中实现处理程序 —— 这是 JavaScript 语言的一个子集。
默认情况下不构建此模块。可在此处下载和安装说明。
此示例适用于 njs 0.2.4 及更高版本。对于 njs 0.2.3 及更早版本,请使用此示例。
示例配置
load_module modules/ngx_stream_js_module.so;
...stream {js_include stream.js;js_set $bar bar;js_set $req_line req_line;server {listen 12345;js_preread preread;return $req_line;}server {listen 12346;js_access access;proxy_pass 127.0.0.1:8000;js_filter header_inject;}
}http {server {listen 8000;location / {return 200 $http_foo\n;}}
}
stream.js
内容:
var line = '';function bar(s) {var v = s.variables;s.log("hello from bar() handler!");return "bar-var" + v.remote_port + "; pid=" + v.pid;
}function preread(s) {s.on('upload', function (data, flags) {var n = data.indexOf('\n');if (n != -1) {line = data.substr(0, n);s.done();}});
}function req_line(s) {return line;
}// Read HTTP request line.
// Collect bytes in 'req' until
// request line is read.
// Injects HTTP header into a client's requestvar my_header = 'Foo: foo';
function header_inject(s) {var req = '';s.on('upload', function(data, flags) {req += data;var n = req.search('\n');if (n != -1) {var rest = req.substr(n + 1);req = req.substr(0, n + 1);s.send(req + my_header + '\r\n' + rest, flags);s.off('upload');}});
}function access(s) {if (s.remoteAddress.match('^192.*')) {s.abort();return;}s.allow();
}
指令
js_access
- | 说明 |
---|---|
语法 |
js_access function ;
|
默认 | —— |
上下文 | stream、server |
设置一个将在 access 阶段调用的 njs 函数。
js_filter
- | 说明 |
---|---|
语法 |
js_filter function ;
|
默认 | —— |
上下文 | stream、server |
设置一个数据过滤器。
js_include
- | 说明 |
---|---|
语法 |
js_include file ;
|
默认 | —— |
上下文 | stream |
指定一个使用 njs 实现服务器和变量处理程序的文件。
js_preread
- | 说明 |
---|---|
语法 |
js_preread function ;
|
默认 | —— |
上下文 | stream、server |
设置一个将在 preread 阶段调用的 njs 函数。
js_set
- | 说明 |
---|---|
语法 |
js_set function ;
|
默认 | —— |
上下文 | stream |
设置一个用于指定变量的 njs 函数。
会话对象属性
每一个流 njs 处理程序都会接收一个参数,一个流会话对象。
原文档
http://nginx.org/en/docs/stream/ngx_stream_js_module.html
ngx_stream_keyval_module
- 示例配置
- 指令
- keyval
- keyval_zone
ngx_stream_keyval_module
模块(1.13.7)可用于创建变量,变量的值从由 API 管理的键值对中获取。
此模块为商业订阅部分。
示例配置
http {server {...location /api {api write=on;}}
}stream {keyval_zone zone=one:32k state=one.keyval;keyval $ssl_server_name $name zone=one;server {listen 12345 ssl;proxy_pass $name;ssl_certificate /usr/local/nginx/conf/cert.pem;ssl_certificate_key /usr/local/nginx/conf/cert.key;}
}
指令
keyval
- | 说明 |
---|---|
语法 |
keyval key $variable zone=name ;
|
默认 | —— |
上下文 | stream |
创建一个新的 $variable
,其值在键值数据库中通过 key 查找。匹配规则由 keyval_zone 指令的 type 参数定义。数据库存储在 zone
参数指定的共享内存区域中。
keyval_zone
- | 说明 |
---|---|
语法 |
keyval_zone zone=name:size [state=file] [timeout=time] [type=string\|ip\|prefix] [sync] ;
|
默认 | —— |
上下文 | stream |
设置维持键值数据库的共享内存区域的名称(name
)和大小(size
)。键值对通过 API 进行管理。
可选的 state
参数指定一个文件(file
),该文件以 JSON 格式保存键值数据库的当前状态,并在重新启动 nginx 时保持不变。
可选的 timeout
参数(1.15.0)设置将键值对从区域中删除的时间。
可选的 type
参数(1.17.1)激活一个额外的索引,该索引针对某种类型的键匹配进行了优化,匹配规则在计算键值 $variable
时定义。
索引存储在相同的共享存储区中,因此需要额外的存储。
type=string
默认配置,不启用索引;使用记录 key 和一个搜索 key 的完全匹配来执行变量查找
type=ip
搜索 key 是 IPv4 或 IPv6 地址或 CIDR 范围的文字表示;要匹配记录 key,搜索 key 必须属于记录 key 指定的子网或与 IP 地址完全匹配
type=prefix
使用记录 key 和搜索 key 的前缀匹配(1.17.5)执行变量查找;要与记录 key 匹配,记录 key 必须是搜索 key 的前缀
可选的 sync
参数(1.15.0)启用共享内存区域同步。同步要求设置超时(timeout
)参数。
如果启用了同步,则将仅在目标群集节点上执行键值对(无论是一个还是全部)的删除操作。经过
timeout
时间后,将删除其他群集节点上相同的键值对。
原文档
- http://nginx.org/en/docs/stream/ngx_stream_keyval_module.html
ngx_stream_limit_conn_module
- 示例配置
- 指令
- limit_conn
- limit_conn_log_level
- limit_conn_zone
ngx_stream_limit_conn_module
模块(1.9.3)用于限制每个定义的 key 的连接数,特别是来自单个 IP 地址的连接数。
示例配置
stream {limit_conn_zone $binary_remote_addr zone=addr:10m;...server {...limit_conn addr 1;limit_conn_log_level error;}
}
指令
limit_conn
- | 说明 |
---|---|
语法 |
limit_conn zone number ;
|
默认 | —— |
上下文 | stream、server |
设置共享内存区域和给定 key 的最大允许连接数。超过此限制时,服务器将关闭连接。例如,以下指令:
limit_conn_zone $binary_remote_addr zone=addr:10m;server {...limit_conn addr 1;
}
每次只允许一个 IP 地址一个连接。
如果指定了几个 limit_conn
指令,则将应用所有已配置的限制。
当且仅当当前级别没有 limit_conn
指令时,指令才从上级继承。
limit_conn_log_level
- | 说明 |
---|---|
语法 |
limit_conn_log_level info | notice | warn | error ;
|
默认 | limit_conn_log_level error; |
上下文 | stream、server |
为服务器限制连接数设置日志记录级别。
limit_conn_zone
- | 说明 |
---|---|
语法 |
limit_conn_zone key zone=name:size ;
|
默认 | —— |
上下文 | stream |
为指定的共享内存区域设置参数,该区域将保留各种 key 的状态。尤其是状态包括当前的连接数。key
可以包含文本、变量及其组合(1.11.2)。不计算 key 为空的连接。用法示例:
limit_conn_zone $binary_remote_addr zone=addr:10m;
上述中,key 是一个 $binary_remote_addr
变量设置的客户端 IP 地址。$binary_remote_addr
的大小为 IPv4 地址的 4 个字节或 IPv6 地址的 16 个字节。存储状态在 32 位平台上总是占用 32 或 64 字节,在 64 位平台上占用 64 字节。一兆字节区域可以保留大约 32,000 个 32 字节状态或大约 16,000 个 64 字节状态。如果区域存储耗尽,服务器将关闭连接。
原文档
http://nginx.org/en/docs/stream/ngx_stream_limit_conn_module.html
Nginx官方文档(四十七)【ngx_stream_js_module|ngx_stream_keyval_module|ngx_stream_limit_conn_module】相关推荐
- Nginx官方文档(四十六)【ngx_stream_access_module|ngx_stream_geo_module|ngx_stream_geoip_module】
ngx_stream_access_module 示例配置 指令 allow deny ngx_stream_access_module 模块(1.9.2)允许对某些客户端地址限制访问. 示例配置 s ...
- Nginx官方文档(三十四)【ngx_http_ssl_module】
ngx_http_ssi_module 示例配置 指令 ssl ssl_buffer_size ssl_certificate ssl_certificate_key ssl_ciphers ssl_ ...
- Nginx官方文档(十一)【HTTP之ngx_http_core_module】
ngx_http_core_module 指令 absolute_redirect aio aio_write alias chunked_transfer_encoding client_body_ ...
- Nginx官方文档(十五)【HTTP之ngx_http_dav_module|ngx_http_empty_gif_module|ngx_http_f4f_module】
ngx_http_dav_module 示例配置 指令 dav_access dav_methods create_full_put_path min_delete_depth ngx_http_da ...
- Nginx官方文档(三十二)【ngx_http_slice_module|ngx_http_spdy_module】
ngx_http_slice_module 示例配置 指令 slice 内嵌变量 ngx_http_slice_module 模块(1.9.8)是一个过滤器,它将请求拆分为子请求,每个子请求都返回一定 ...
- Adopt Open JDK官方文档(四)基于虚拟机的编译环境
4.基于虚拟机的编译环境 准备工作 编译你自己的虚拟机 编译你自己的轻量级虚拟机 在Host 与 Guest VM 之间共享文件 适用于 OpenJDK 8 的Vagrant Puppet 环境 4. ...
- ABP官方文档(四十四)【后台作业和后台工人】
7.1 ABP后台服务 - 后台作业和后台工人 7.1.1 简介 ABP提供了后台作业和后台工人,来执行应用程序中的后台线程的某些任务. 7.1.2 后台作业 由于各种各样的原因,你需要后台作业以队列 ...
- ABP官方文档(四十五)【集成Hangfire】
7.2 ABP后台服务 - 集成Hangfire 7.2.1 简介 Hangfire是一个综合性的后台作业管理工具.你可以用Hangfire来替换ABP中默认实现的后台作业管理者.你可以对Hangfi ...
- ABP官方文档(四十九)【集成EntityFramework】
9.1 ABP基础设施层 - 集成Entity Framework ABP可以与任何ORM框架协同工作,它内置了对EntityFramework的集成支持.本文将介绍如何在ABP中使用EntityFr ...
最新文章
- Linux的ELF格式分析
- 13KB的代码能做什么?有些人可是弄出了一个完整的游戏!
- DirectX 高级着色语言HLSL入门
- Email 正则验证
- mysql replication health is not ok_MySQL的高可用——MHA
- NSIS设置桌面快捷方式的图标
- java jdbc dbcp连接SQL Server
- AndroidStudio安卓原生开发_UI高级_Shape的使用_虚线_直线_矩形_渐变_径向渐变_线性渐变_扫描渐变---Android原生开发工作笔记122
- Windows环境下查看Java进程ID,找到java程序对应的进程pid
- maven 排除某个类_java-如何从Maven依赖项中排除某些程序包(在JAR中)?
- Android Studio for Experts(Android Dev Summit2015)
- 《Effective Python 2nd》 读书笔记——列表与字典
- cr2格式缩略图不显示_cr2缩略图补丁 佳能相机RAW文件CR2原片格式缩略图显示补丁- 游侠下载站...
- cpu空载50度,大热天,cpu都上50度了! -
- element 如何使用自定义icon图标
- Mac终端常用命令及报错处理
- 基于Python3.6实现Java版murmurhash算法
- mac pro m1:安装dump文件内存分析工具——MAT
- 【Interview###】华为、中兴嵌入式(C)笔试题
- Java解决上台阶问题