概述
OpenResty® 是一个基于 [Nginx](http://openresty.org/cn/nginx.html) 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
OpenResty® 通过汇聚各种设计精良的 [Nginx](http://openresty.org/cn/nginx.html) 模块(主要由 OpenResty 团队自主开发),从而将 [Nginx](http://openresty.org/cn/nginx.html) 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 [Nginx](http://openresty.org/cn/nginx.html) 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。
OpenResty® 的目标是让你的Web服务直接跑在 [Nginx](http://openresty.org/cn/nginx.html) 服务内部,充分利用 [Nginx](http://openresty.org/cn/nginx.html)的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。
OpenResty 简单理解,就相当于封装了nginx,并且集成了LUA脚本,开发人员只需要简单的其提供了模块就可以实现相关的逻辑,而不再像之前,还需要在nginx中自己编写lua的脚本,再进行调用了。
安装
**linux安装openresty:**
1、添加仓库执行命令
yum install yum-utils
yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
2、执行安装
yum install openresty
3、安装成功后 会在默认的目录如下:
/usr/local/openresty
4、启动openresty
cd /usr/local/openresty/nginx/sbin
./nginx
入门程序
配置openresty的nginx配置文件`conf/nginx.conf`。在http模块下添加一个server配置
```lua
server {
listen 8080;
location / {
default_type text/html;
content_by_lua_block {
ngx.say("<p>hello, world</p>")
}
}
}
重启openrestry
cd /usr/local/openresty/nginx/sbin
./nginx -s reload
输入如下地址,进行访问 http://192.168.200.128:8080 浏览器输出 `hello, world`
openrestry中的常用Lua API介绍
和一般的Web Server类似,我们需要接收请求、处理并输出响应。而对于请求我们需要获取如请求参数、请求头、Body体等信息;而对于处理就是调用相应的Lua代码即可;输出响应需要进行响应状态码、响应头和响应
内容体的输出。因此我们从如上几个点出发即可
### 接收请求
获取nginx变量:`ngx.var`
```lua
server {
listen 8080;
location / {
#定义nginx变量
set $b $host;
default_type text/html;
content_by_lua_block {
local var = ngx.var; -- 获取nginx变量
ngx.say("ngx.var.b : ", var.b, "<br/>")
ngx.var.b = 2; -- 设置变量值
ngx.say("ngx.var.b : ", var.b, "<br/>")
ngx.say("<br/>")
}
}
}
```
获取请求头:`ngx.req.get_headers()`
```lua
server {
listen 8080;
location / {
#定义nginx变量
set $b $host;
default_type text/html;
content_by_lua_block {
local headers = ngx.req.get_headers()
ngx.say("headers begin", "<br/>")
ngx.say("Host : ", headers["Host"], "<br/>")
ngx.say("user-agent : ", headers["user-agent"], "<br/>")
ngx.say("user-agent : ", headers.user_agent, "<br/>")
ngx.say("=======================================","</br>")
for k,v in pairs(headers) do
if type(v) == "table" then
ngx.say(k, " : ", table.concat(v, ","), "<br/>")
else
ngx.say(k, " : ", v, "<br/>")
end
end
ngx.say("headers end", "<br/>")
ngx