[干货]Openresty编译安装介绍

 

承接上次Nginx与Openresty文章, 简单介绍Openresty的编译及简单demo。...



承接上次

Nginx与Openresty
文章, 简单介绍Openresty的编译及简单demo。

本次安装以CentOS为例, 不足之处多多指正。

  • 安装基本依赖库
    yum install readline-devel pcre-devel openssl-devel gcc curl
  • 下载Openresty安装包
    curl -O https://openresty.org/download/openresty-1.11.2.2.tar.gz&& tar zxvf openresty-1.11.2.2.tar.gz&& cd openresty-1.11.2.2
    示例代码视情况更改
  • 编译安装
    ./configure --prefix=/opt/openresty--with-pcre-jit--with-http_iconv_module--with-http_postgres_module-j2
    各人编译时, 
    --with-http_postgres_module
    选项需要有
    libpqxx-devel

    编译介绍

    所有模块,可以通过
    ./configure --help
    查看
  • [list]
  • 默认使用luajit
  • --prefix  安装目录
  • --with-pcre-jit  开启PCRE支持
  • --with-http\_iconv\_module   Iconv Nginx 模块
  • --with-http\_postgres\_module   Postgres Nginx 模块
  • --with-http\_drizzle\_module  连接MySQL/Drizzle模块
[*]编译后的可执行文件在
/opt/openresty/nginx/sbin/nginx


[/*][/list]

OpenResty 初步体验

示例配置
location = /wafMon {
default_type "text/html";
content_by_lua_file /opt/openresty/nginx/ngxjo_lua_waf/monitor.lua;
}

location的匹配正则,不再简单介绍。请求"IP/wafMon"时, 由monitor.lua处理 常用method

  • 获取uri

GET请求

ngx.req.get_uri_args()

POST请求
ngx.req.read_body()
local arg = ngx.req.get_post_args()


  • 读取请求body
  • [list]
  • 全局配置
    lua_need_request_body on
  • 非全局读取
    ngx.req.read_body()local data = ngx.req.getbodydata()
[*]返回响应体
ngx.print
, 
ngx.say
两种输出方式均为异步
响应体过大时,可以使用chunked方法

local data
while true do
data = file:read(1024)
if nil == data then
break
end
ngx.print(data)
ngx.flush(true)
end
file:close()


[/*][*]返回状态
ngx.status = 403


[/*][/list]

注:

ngx.exit()
为中断当前操作
ngx.eof()
为中断响应流输出,中断HTTP连接

具体用法可以参考
OpenRe
sty
最佳实践


执行阶段介绍

nginx非常棒的一点是,会把一个会话分成很多阶段,第三方模块可以根据需求挂载到不同阶段。 11个执行阶段分为
post-read、server-rewrite、find-config、
rewrite、post-rewrite、preaccess、access、
post-access、try-files、content、log


相应的openresty中lua也有多个阶段,常用的介绍如下

  • set_by_lua:   流程分之处理判断变量初始化
  • rewrite_by_lua:    转发、重定向、缓存等功能(例如特定请求代理到外网)
  • access_by_lua:    IP准入、接口权限等情况集中处理(例如配合iptable完成简单防火墙)
  • content_by_lua:   内容生成
  • header_filter_by_lua:    应答HTTP过滤处理(例如添加头部信息)
  • body_filter_by_lua:    应答BODY过滤处理(例如完成应答内容统一成大写)
  • log_by_lua:   回话完成后本地异步完成日志记录(日志可以记录在本地,还可以同步到其他机器)
将处理分为多个阶段,模块根据需要分阶段挂载是值得借鉴的地方,也使我们编写模块更加方便,接下来的文章会拿简单的例子做深入介绍。

星辰干货店

通过 逼稿 抢稿 人道主义欺诈的方式搞到的各种干货都在这里


    关注 星辰工作室


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册