[干货]Openresty编译安装介绍

Posted 星辰工作室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[干货]Openresty编译安装介绍相关的知识,希望对你有一定的参考价值。


本次安装以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查看

    • 默认使用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

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

    • 全局配置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

注:

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

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

执行阶段介绍

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:   回话完成后本地异步完成日志记录(日志可以记录在本地,还可以同步到其他机器)

将处理分为多个阶段,模块根据需要分阶段挂载是值得借鉴的地方,也使我们编写模块更加方便,接下来的文章会拿简单的例子做深入介绍。


星辰干货店

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








以上是关于[干货]Openresty编译安装介绍的主要内容,如果未能解决你的问题,请参考以下文章

源代码编译安装

云计算的1024种玩法手把手教你如何编译升级 OpenResty

Nginx扩展之Openresty

Nginx 安装 Lua 支持

nginx实战 OpenResty 安装

openresty 编译和WAF 组件安装配置