OpenResty 入门教程

1.OpenResy简介和安装

OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

简单地说OpenResty 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。

使用docker 创建实例

docker run -d --name="openresty-nginx" -p 8088:80 openresty/openresty

访问http://localhost:8088/

 

 

2.动态输出

首先看一下openresty安装目录下的nginx中的配置文件,如果有下面这一行:

include /etc/nginx/conf.d/*.conf

那就要先修改/etc/nginx/conf.d目录下的default.conf文件:

vim default.conf

在server中新增以下代码:

location /hello {
    default_type text/html;
    content_by_lua 'ngx.say("<p>hello, openresty</p>")';
}

docker容器中安装vim:

apt-get update
apt-get install vim

然后重新加载nginx

nginx -s reload

并访问http://localhost:8088/hello,得到:

可以看到使用lua输出的内容成功显示。

 

3.lua文件输出内容

 

上面的代码直接把lua代码写到nginx配置里面了,维护起来不是很方便,我们把它拿出来一个单独的文件,并放到nginx目录下面单独的lua目录下,方便管理。

首先在/usr/local/openresty/nginx下新建一个lua目录,然后创建一个hello.lua文件,文件内容为:

ngx.say("<p>hello, nginx_lua</p>")

然后修改/etc/nginx/conf.d/default.conf:

location /hello {
    default_type text/html;
    content_by_lua_file /usr/local/openresty/nginx/lua/hello.lua
}

 

再重新加载一下nginx,访问http://localhost:8088/hello,得到:

说明通过lua文件输出的内容也成功显示。

 

但是我们发现还有一个问题,如果想要处理很多个请求,那不是要在nginx里面配置N个location吗,我们肯定不会这么做,这里可以通过nginx动态匹配指定lua文件名。nginx配置文件default.conf修改一下:

location ~ /lua/(.+) {
    content_by_lua_file /usr/local/openresty/nginx/lua/$1.lua;
}

这个时候访问http://localhost:8088/lua/hello可以得到:

lua后面的路径就是刚刚创建的hello.lua文件名。

然后我们在/usr/local/openresty/nginx/lua目录下新建一个goodbye.lua文件,内容为:

ngx.say("<p>goodbye, nginx_lua</p>")

这时访问http://localhost:8088/lua/goodbye可以得到:

 

4.接收参数

 

首先创建一个req.lua文件,内容如下:

local _M = {}
-- 获取http get/post 请求参数
function _M.getArgs()
    -- 获取http请求方式 GET or POST
    local request_method = ngx.var.request_method
    -- 这里是一个table,包含所有get请求参数
    local args = ngx.req.get_uri_args()
    if "POST" == request_method then
        -- 先读取请求体
        ngx.req.read_body()
        -- 这里也是一个table,包含所有post请求参数
        local postArgs = ngx.req.get_post_args()
            if postArgs then
                for k, v in pairs(postArgs) do
                    args[k] = v
                end
            end
    end
    return args
end
return _M

 

然后先要在nginx.conf配置文件中的http部分加入 lua_package_path 的配置,也就是配置lua脚本的访问目录,还要注意一下格式:

lua_package_path "/usr/local/openresty/nginx/lua/?.lua;;";

再创建一个result.lua文件,内容如下:

-- 引入req模块
local req = require("req")
-- 获取请求参数列表
local args = req.getArgs()
-- 获取key为name的值
local name = args['name']
-- 如果不存在指定默认值
if name == nil or name == "" then
    name = "nobody"
end
-- 输出结果
ngx.say("<p>hello " .. name .. "!</p>")

 

重新加载一下nginx,访问 http://localhost:8088/lua/result?name=xp,得到:

再访问一下http://localhost:8088/lua/result?name=openresty,得到:

可以看到成功解析参数。


参考:

http://www.itcast.cn/news/20200315/16130698949.shtml

https://wiki.jikexueyuan.com/project/openresty/

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值