子查询
子查询
Nginx 子请求是一种非常强有力的方式,它可以发起非阻塞的内部请求访问目标 location。目标 location 可以是配置文件中其他文件目录,或 任何 其他 nginx C 模块,包括 ngx_proxy、ngx_fastcgi、ngx_memc、ngx_postgres、ngx_drizzle,甚至 ngx_lua 自身等等 。
需要注意的是,子请求只是模拟 HTTP 接口的形式, 没有 额外的 HTTP/TCP 流量,也 没有 IPC (进程间通信) 调用。所有工作在内部高效地在 C 语言级别完成。
子请求与 HTTP 301/302 重定向指令 (通过 ngx.redirect) 完全不同,也与内部重定向 ((通过 ngx.exec) 完全不同。
在发起子请求前,用户程序应总是读取完整的 HTTP 请求体 (通过调用 ngx.req.read_body 或设置 lua_need_request_body 指令为 on).
该 API 方法(ngx.location.capture_multi 也一样)总是缓冲整个请求体到内存中。因此,当需要处理一个大的子请求响应 ...
helloworld
HelloWorld
HelloWorld 是我们亘古不变的第一个入门程序。但是 OpenResty 不是一门编程语言,跟其他编程语言的 HelloWorld 不一样,让我们看看都有哪些不一样吧。
创建工作目录
OpenResty 安装之后就有配置文件及相关的目录的,为了工作目录与安装目录互不干扰,并顺便学下简单的配置文件编写,我们另外创建一个 OpenResty 的工作目录来练习,并且另写一个配置文件。我选择在当前用户目录下创建 openresty-test 目录,并在该目录下创建 logs 和 conf 子目录分别用于存放日志和配置文件。
$ mkdir ~/openresty-test ~/openresty-test/logs/ ~/openresty-test/conf/
$
$ tree ~/openresty-test
/Users/yuansheng/openresty-test
├── conf
└── logs
2 directories, 0 files
创建配置文件
在 conf 目录下创建一个文本文件作为配置文件,命名为 nginx.conf,文件内容 ...
Logstash Grok Debugger环境构建
编辑:糖果
【前记】
这个环境的搭建,主要为了用于分离lua_logger推送到syslog中的数据,解析后放到ES里,再对外提供RESTY接口。基本的工具就是这么使用,至于是具全的业务如何设计实现,根据实际情况来。比如,有的WAF系统不提供开发的API把block的数据暴露出来,可能就需要自己实现一套。
【正文】
1. 安装 RVM
2. 安装 Ruby 和 Gems
3. 安装 Rails
4. 安装 jls-grok
5. Ruby grok 解析
6. 调试 grok
注意:不要用 root 执行以下操作。
用 logstash 收集 IIS、tomcat 日志,或是其他时,你需要调试 grok 表达式,每次都需要重新加载文件,然后再把 sincedb 文件全部删除,否则 logstash 不会重复处理文件,很麻烦。
本文主要介绍如何安装 GrokDebuger 环境,再在命令行调试 Grok 表达式。Logstash 是用 Ruby 编写的,而 Ruby 有专门的处理 grok 表达式的 gem。
下面过程有先后顺序。
安装 RVM
rvm(Ruby Versio ...
获取 uri 参数
获取 uri 参数
上一章节,主要介绍了一下如何使用不同 location 进行协作,对 location 进行糅合,往往都是要需要参数的二次调整。如何正确获取传递参数、设置参数,就是你的必修课了。本章目的是给出在 OpenResty 的世界中,我们如何正确获取、设置 uri 参数。
获取请求 uri 参数
首先看一下官方 API 文档,获取一个 uri 有两个方法:ngx.req.get_uri_args、ngx.req.get_post_args,二者主要的区别是参数来源有区别。
参考下面例子:
server {
listen 80;
server_name localhost;
location /print_param {
content_by_lua_block {
local arg = ngx.req.get_uri_args()
for k,v in pairs(arg) do
ngx.say("[GET ] key:", ...
获取请求 body
获取请求 body
在 Nginx 的典型应用场景中,几乎都是只读取 HTTP 头即可,例如负载均衡、正反向代理等场景。但是对于 API Server 或者 Web Application ,对 body 可以说就比较敏感了。由于 OpenResty 基于 Nginx ,所以天然的对请求 body 的读取细节与其他成熟 Web 框架有些不同。
最简单的 “Hello ****”
我们先来构造最简单的一个请求,POST 一个名字给服务端,服务端应答一个 “Hello ****”。
http {
server {
listen 80;
location /test {
content_by_lua_block {
local data = ngx.req.get_body_data()
ngx.say("hello ", data)
}
}
...
CentOS 平台安装
CentOS 平台安装
源码包准备
我们首先要在官网下载 OpenResty 的源码包。官网上会提供很多的版本,各个版本有什么不同也会有说明,我们可以按需选择下载。
笔者选择下载的源码包为 ngx_openresty-1.9.7.1.tar.gz(请大家跟进使用最新版本,这里只是个例子)。
依赖库安装
将这些相关的库perl 5.6.1+,libreadline, libpcre, libssl安装在系统中。
按照以下步骤:
输入以下命令yum install readline-devel pcre-devel openssl-devel perl,一次性安装需要的库。
相关库安装成功。安装成功后会有 “Complete!” 字样。
OpenResty 安装
在命令行中切换到源码包所在目录。
解压源码包,tar xzvf ngx_openresty-1.9.7.1.tar.gz。若你下载的源码包版本不一样,将相应的版本号改为你所下载的即可。
切换工作目录到 cd ngx_openresty-1.9.7.1。
了解默认激活的组件。OpenResty 官 ...
简单API Server框架
简单API Server框架
实现一个最最简单的数学计算:加、减、乘、除,给大家演示如何搭建简单的 API Server。
按照前面几章的写法,先来看看加法、减法示例代码:
worker_processes 1; #nginx worker 数量
error_log logs/error.log; #指定错误日志文件路径
events {
worker_connections 1024;
}
http {
server {
listen 80;
# 加法
location /addition {
content_by_lua_block {
local args = ngx.req.get_uri_args()
ngx.say(args.a + args.b)
}
}
# 减法
...
Windows 平台安装
Windows 平台安装
1、下载 Windows 版的 OpenResty 压缩包,这里我下载的是 openresty_for_windows_1.7.10.2001_64bit ,你也可以选择 32bit 的版本。如果你对源码感兴趣,下面是源码地址 https://github.com/LomoX-Offical/nginx-openresty-windows。
2、解压到要安装的目录,这里我选择D盘根目录,你可以根据自己的喜好选择位置。
3、进入到 openresty_for_windows_1.7.10.2001_64bit 目录,双击执行 nginx.exe 或者使用命令 start nginx 启动 nginx,如果没有错误现在 nginx 已经开始运行了。
4、验证 nginx 是否成功启动:
使用 tasklist /fi "imagename eq nginx.exe" 命令查看 nginx 进程,其中一个是 master 进程,另一个是 worker 进程,如下图:
在浏览器的地址栏输入 localhost,加载 nginx 的欢 ...
Ubuntu 平台安装
Ubuntu 平台安装
源码包准备
我们首先要在官网下载 OpenResty 的源码包。官网上会提供很多的版本,各个版本有什么不同也会有说明,我们可以按需选择下载。
笔者选择下载的源码包为 ngx_openresty-1.9.7.1.tar.gz。
相关依赖包的安装
首先你要安装 OpenResty 需要的多个库
请先配置好你的apt源,配置源的过程在这就不阐述了,然后执行以下命令安装OpenResty编译或运行时所需要的软件包。
# apt-get install libreadline-dev libncurses5-dev libpcre3-dev \
libssl-dev perl make build-essential
如果你只是想测试一下OpenResty,并不想实际使用,那么你也可以不必去配置源和安装这些依赖库,请直接往下看。
OpenResty 安装
在命令行中切换到源码包所在目录。
解压源码包,tar xzvf ngx_openresty-1.9.7.1.tar.gz。若你下载的源码包版本不一样,将相应的版本号改为你所下载的即可。
切换工 ...
Mac OS X 平台安装
Mac OS X 平台安装
源码包准备
我们首先要在官网下载OpenResty的源码包。官网上会提供很多的版本,各个版本有什么不同也会有说明,我们可以按需选择下载。笔者选择下载的源码包 ngx_openresty-1.9.7.1.tar.gz。
相关库的安装
将这些相关库安装到系统中,推荐如 Homebrew 这类包管理方式完成包管理:
$ brew update
$ brew install pcre openssl
OpenResty 安装
在命令行中切换到源码包所在目录。
输入命令tar xzvf ngx_openresty-1.9.7.1.tar.gz,按回车键解压源码包。若你下载的源码包版本不一样,
将相应的版本号改为你所下载的即可,或者直接拷贝源码包的名字到命令中。
此时当前目录下会出现一个ngx_openresty-1.9.7.1文件夹。
在命令行中切换工作目录到ngx_openresty-1.9.7.1。输入命令cd ngx_openresty-1.9.7.1。
配置安装目录及需要激活的组件。使用选项 --prefix=install_path ...