zoukankan      html  css  js  c++  java
  • Openresty使用

    OpenResty是一个全功能的 Web 应用服务器。它打包了标准的 Nginx 核心,常用的第三方模块以及大多数依赖项。 可以把它看成是Nginx附加众多的第三方插件的合集。其主体是嵌入lua脚本的支持,让你能够使用lua灵活地处理运算逻辑。

    本课程主要讲luaNginx带来的新的处理方式,及OpenResty组件的使用。

    12.1. Openresty的安装配置

    12.1.1. 简易的yum安装方式

    此方式简单,缺点是无法干预启停插件

    yum install yum-utils

    yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo

    yum install openresty 

    12.1.2. 源码安装方式

    wget https://openresty.org/download/openresty-1.15.8.1.tar.gz 

    tar -zxvf openresty-1.15.8.1.tar.gz 

    ##选择需要的插件启用, --with-Components 激活组件,--without 则是禁止组件 

    ./configure  --without-http_redis2_module  --with-http_iconv_module

    make  && make install

    vi /etc/profile ##加入path路径

    export PATH=$PATH:/usr/local/openresty/nginx/sbin/

    source /etc/profile ##生效配置

    12.1.3. 安装检测

    nginx  -V   ##如下显示,则表示安装成功

     

    12.2. Lua介入Nginx带来的基础api

    主要帮助对http请求取参、取header头、输出等

    ngx.arg

    指令参数,如跟在content_by_lua_file后面的参数

    ngx.var

    request变量,ngx.var.VARIABLE引用某个变量

    ngx.ctx

    请求的lua上下文

    ngx.header

    响应头,ngx.header.HEADER引用某个头

    ngx.status

    响应码

    ngx.log

    输出到error.log

    ngx.send_headers

    发送响应头

    ngx.headers_sent

    响应头是否已发送

    ngx.resp.get_headers

    获取响应头

    ngx.is_subrequest

    当前请求是否是子请求

    ngx.location.capture

    发布一个子请求

    ngx.location.capture_multi

    发布多个子请求

    ngx.print

    输出响应

    ngx.say

    输出响应,自动添加‘ ‘

    ngx.flush

    刷新响应

    ngx.exit

    结束请求

    12.3. Lua嵌入Nginx的时机阶段

    Nginx执行lua脚本片断时,需要明确指明执行的nginx阶段时机。主要有以下几种时机:

    set_by_lua* : 设置nginx变量,实现复杂的赋值逻辑 

    rewrite_by_lua* : 实现转发、重定向等功能 

    access_by_lua* : IP 准入、接口访问权限等情况集中处理 

    content_by_lua* : 接收请求处理并输出响应 

    header_filter_by_lua* : 设置headercookie

    body_filter_by_lua* : 对响应数据进行过滤,如截断/替换等

    12.4. Lua基础功能使用介绍

    12.4.1. hello world

    content阶段,执行lua脚本,输出hellopeter

     

    12.4.2. 执行lua脚本文件

     

    12.4.3. luaget参数

    页面请求路径:http://lua.enjoy.com/args?a=20&b=50

    则ngx.var.arg_a即取得a参数值,如下图:

     

    12.4.4. lua取全量参数

    请求:http://lua.enjoy.com/args_read?a=20&b=50

     

    12.4.5. luarequestheader信息

     

    12.4.6. lua脚本传参

    使用端传参:

     

    脚本中借助ngx.arg取参

     

    12.4.7. 权限校验

    一般校验动作,指定在access阶段执行脚本

     

    脚本处理

     

    12.4.8. 内容过滤

    Nginx有时候,需要对下游服务生成的内容进行处理过滤,如下图

     

    脚本中的处理

     

    12.5. Lua引入第三方模块的使用

    OpenResty提供了非常多的第三方插件,支持操作redis/mysql等服务,lua使用它们的模式一般按以下流程

    u require  “resty/xxx” 导入模块功能,类似java中的import导入类

    u local  obj = xxx:new() :模块创建对象obj

    local ok, err  = obj :connect :对象连接到目标库

    u obj :method :这里可以为所欲为,尽情操纵目标库了

    12.5.1. Lua-resty-redis连接redis用法

    Lua-resty-redis插件,对Nginx操作redis的支持十分强大,成熟的用法演示如下:

    基础的引入、连接动作

     

    redis操作动作

     

    具体全量的程序,见源码配置包

    12.5.2. Lua-resty-mysql连接mysql数据库

    引入模块、创建连接

     

    mysql查询操作

     

  • 相关阅读:
    穿出不一样的自己,做自己的高级定制服装师_豆瓣
    微信公众帐号开发。大家是用框架还是自己写的流程。现在遇到若干问题。请教各路大仙
    (Pre sell) ZOPO ZP998 (C2 II) 5.5 inch smart phone True Octa Core MTK6592 1920X1080 FHD screen 401 ppi 2GB/32GB 14.0Mp camera-in Mobile Phones from Electronics on Aliexpress.com
    内秀_百度百科
    Boost正则表达式库regex常用search和match示例
    怎样学习使用libiconv库
    libiconv_百度百科
    c++
    解决Boost.Regex对中文支持不好的问题
    毛料西服缩水了怎么办?_百度知道
  • 原文地址:https://www.cnblogs.com/Soy-technology/p/11355625.html
Copyright © 2011-2022 走看看