OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。
OpenResty® 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。
参考 组件 可以知道 OpenResty® 中包含了多少软件。
参考 上路 学习如何从最简单的 hello world 开始使用 OpenResty® 开发 HTTP 业务,或前往 下载 直接获取 OpenResty® 的源代码包开始体验。
About
Yichun Zhang (agentzh) , 22 Mar 2020 (created 21 Jun 2011)
这个开源 Web 平台主要由章亦春(agentzh)维护。在 2011 年之前曾由雅虎中国和淘宝网赞助,在后来的 2012 ~ 2016 年间主要由美国的 CloudFlare 公司 提供支持。目前,OpenResty® 主要由 OpenResty 软件基金会和 OpenResty Inc. 公司提供支持。
因为大部分 Nginx 模块都是由本软件包的维护者开发,所以可以确保所有这些模块及其他组件可以很好地一起工作。
打包的各个软件组件版权属于各自的版权持有者。
本网站是一个全动态的 Web 应用,完全基于 OpenResty® 平台和 PostgreSQL 数据库构建。其实现开源在 下面这个 GitHub 仓库中:
https://github.com/openresty/openresty.org
如果你希望编辑和改进这个网站的话,请随意建立这个仓库的分支,或者直接联系我们索取 git 提交权限。
其他大佬分享
OpenResty简介
了解OpenResty
OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
简单地说OpenResty 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。
OpenResty安装

(我们现在使用的windows平台版本是1.13.6.2)
选择安装目录(建议非中文)进行解压双击nginx.exe运行即可

测试:打开浏览器访问 localhost

快速入门
动态输出
我们现在做个最简单的小例子,使用Lua脚本动态输出内容,打开openresty-1.13.6.2-win64目录下的conf/nginx.conf文件
在server中新增以下代码
location /hello { default_type text/html;content_by_lua ‘ngx.say(“<p>hello, world</p>”)’;}
类似这样
http {server {listen 80; server_name localhost; location / {default_type text/html;content_by_lua ‘ngx.say(“<p>hello, world</p>”)’;}}}

现在启动nginx,然后访问,如果你之前启动了,那么需要nginx -s reload
通过ngx.say 我们可以往客户端输出响应文本,是不是跟咱们tomcat response.write很像嘻嘻,后期我们会使用它输出json
还有一个输出的函数是ngx.print,同样也是输出响应内容
优化动态输出
上面的代码直接把lua代码写到nginx配置里面了,维护起来不是很方便,我们把它拿出来一个单独的文件,并 放到openresty-1.13.6.2-win64目录下面单独的lua目录下,方便管理


新建lua/hello.lua 文件,并编写代码
ngx.say(“<p>hello, world</p>”)
nginx.conf 改成这样
location / {default_type text/html; content_by_lua_file lua/hello.lua;}



然后nginx -s reload 一下,页面效果是一样的
观察以上代码其实还会发现一个问题,如果我们想要处理很多个请求,那不是要在nginx里面配置N个location 吗,我们肯定不会这么做,这里可以通过nginx动态匹配指定lua文件名
nginx.conf 改成这样location ~ /lua/(.+) { content_by_lua_file lua/$1.lua;}
新建lua/itheima.lua 文件,并编写代码
ngx.print(“<p>hello,itheima</p>”)
然后nginx -s reload 一下
这个时候访问hello world的请求url就变成了//localhost/lua/hello 了
同理,我们在lua文件里面创建一个itheima.lua,就可以通过//localhost/lua/itheima 来访问了
接收参数
我们知道http请求通常分为两种,分别是GET,POST,在http协议中,GET参数通常会紧跟在uri后面,而POST请求参数则包含在请求体中使用OpenResty获取请求参数的方法也有二种,为了统一获取请求参数的方式,隐藏具体细节,提供一个更友 好的api接口,我们可以简单的封装一下
创建lua/req.lua 文件
local _M = {}— 获取http get/post 请求参数function _M.getArgs()— 获取http请求方式 GET or POSTlocal request_method = ngx.var.request_method— 这里是一个table,包含所有get请求参数local args = ngx.req.get_uri_args()— 如果是post参数获取if “POST” == request_method then— 先读取请求体ngx.req.read_body()— 这里也是一个table,包含所有post请求参数local postArgs = ngx.req.get_post_args() if postArgs thenfor k, v in pairs(postArgs) do args[k] = vendendendreturn argsendreturn _M
这个模块就实现了参数的获取,而且支持GET,POST两种传参方式
接下来我们可以写一个简单的lua,来引入这个模块,然后测试一下效果
conf/nginx.conf 需要添加http {lua_package_path C:\Users\Ys\Desktop\openresty\openresty-1.13.6.2-win64\lua\?.lua; # 这里一定要指定package_path,否则会找不到引入的模块,然后会500server {listen 80; server_name localhost; lua_code_cache off; location ~ /lua/(.+) {default_type text/html; content_by_lua_file lua/$1.lua;}}}创建lua/test.lua 文件— 引入req模块local req = require “req”— 获取请求参数列表local args = req.getArgs()— 获取key为name的值local name = args[‘name’]— 如果不存在指定默认值if name == nil or name == “” then name = “xiaozhi”end— 输出结果ngx.say(“<p>hello ” .. name .. “!</p>”)
然后 nginx -s reload一下


访问
响应客户端你请求携带的参数访问


响应客户端默认的参数
总结
本次主要讲解了OpenResty在window环境下的安装及使用。通过本篇文章希望大家可以简单掌握OpenResty 接收页面请求参数及动态输出内容,后续将给大家带来获取从redis获取数据并以json格式响应给客户端
转载请注明:落伍老站长 » OpenResty是什么?是国产吗?是nginx的发行版吗?