简介
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 等都进行一致的高性能响应。
安装
以下安装基于Centos 7,并且采用OpenResty 官方提供的预编译包进行安装。
- 添加官方仓库
sudo yum install yum-utils
sudo yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
- 安装 OpenResty
sudo yum install openresty
- 安装命令行工具
sudo yum install openresty-resty
Hello World
- 新建目录
mkdir /home/www
cd /home/www
mkdir logs/ conf/
- 添加配置文件
conf/nginx.conf
。
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
server {
listen 8080;
location / {
default_type text/html;
content_by_lua_block {
ngx.say("<p>hello, world</p>")
}
}
}
}
- 添加环境变量
`
bash
vim /etc/profile
PATH=/usr/local/openresty/nginx/sbin:$PATH
export PATH
4. 启动 nginx
``` bash
nginx -p `pwd`/ -c conf/nginx.conf
openresty + lua 项目化
上面的例子我们是直接在配置文件中写 lua 的脚本,当脚本代码越来越多的时候会非常难进行维护。所以我们需要将其项目化。其项目的结构如下:
example
- lua
- example.lua
- conf
- example.conf #
- lualib
- *.lua
- *.so
其中,lua 目录下放置我们自定义的 lua 代码 ,conf 放置 该项目的 nginx 配置,lualib 放置 lua 依赖的库和第三方模块。其中把lualib放到项目中以后可以一起部署,防止有的服务器忘记复制依赖而造成缺少依赖的情况。
我是把 example 项目放置在 opt/openresty/
目录下面。
- 拷贝 lualib 包
把 openresty 下的 lualib 拷贝到项目 example 目录下。
cp -r /usr/local/openresty/lualib /opt/openresty/example
example
的conf
目录下新增 examle.conf 配置文件
server {
listen 80;
server_name _;
location /example {
defalut_type 'text/html';
lua_code_cache on;
content_by_lua_file /opt/openresty/example/lua/example.lua;
}
}
example
的lua
目录下新增 example.lua 脚本。
该脚本用于写我们的业务逻辑。
ngx.say("Hello World, OpenResty");
- 修改
/usr/local/openresty/nginx/conf/nginx.conf
配置文件
vim /usr/local/openresty/nginx/conf/nginx.conf
... 省略 ...
http {
include mime.types;
default_type application/octet-stream;
lua_package_path "/opt/openresty/example/lualib/?.lua;;"; # lua 模块
lua_package_cpath "/opt/openresty/example/lualib/?.so;;"; # c 模块
include "/opt/openresty/example/conf/example.conf"; # 项目的 nginx 配置
}
... 省略 ...
在 http
部分增加了三行内容,分别是 lua_package_path
、 lua_package_cpath
、 include
。
- 启动和测试
nginx
curl http://ip/example # 其中 ip 输入自己服务器上的 IP 地址
输出以下内容表示成功:
Hello World, OpenResty
- 查看日志
日志默认在 usr/local/openresty/nginx/logs
目录下。