最近需要构建一个API SERVER,所以接触了Openresty,本文记录我与Openresty的第一次。
环境:CentOS 8
OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
OpenResty通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速 构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。
$ yum install -y pcre-devel openssl-devel gcc curl
$ cd /usr/local/src
$ wget https://openresty.org/download/openresty-1.17.8.2.tar.gz
$ tar zxvf openresty-1.17.8.2.tar.gz
$ mv openresty* openresty
$ cd openresty
$ ./configure --with-luajit \
--without-http_redis2_module \
--with-http_iconv_module
$ gmake
$ gmake install
说明,缺省安装目录/usr/local/openresty,可以用--prefix=XXX指定安装路径,./configure --help
寻求帮助
如果您的电脑支持多核 make 工作的特性, 您可以这样编译:
$ make -j2
$ vi /etc/profile
export PATH=/usr/local/openresty/nginx/sbin:$PATH
$ source /etc/profile
OpenResty 安装之后就有配置文件及相关的目录的,为了工作目录与安装目录互不干扰,顺便学下简单的配置文件编写,我另外创建一个 OpenResty 的工作目录来练习。我选择在根目录下创建 openresty-test 目录,并在该目录下创建 logs 和 conf 子目录分别用于存放日志和配置文件。请注意:OpenResty使用nobody用户起工作进程,所以工作目录应该对nobody有权限。
$ cd /
$ mkdir openresty-test openresty-test/logs/ openresty-test/conf/
在上一步建立的 conf 目录下创建一个文本文件作为配置文件,命名为 nginx.conf,文件内容如下:
events {
worker_connections 1024;
}
http {
server {
listen 6000;
location / {
default_type text/html;
content_by_lua_block {
ngx.say("HelloWorld")
}
}
}
}
$ nginx -p /openresty-test
这时,在命令行输入curl http://localhost:6000 -i试试
或者,打开浏览器输入:localhost:6000
你看见什么了?
刚才的实例实在简单,下面写一个Lua,做点深入的事情
Openresty没有提供默认的Http客户端,需要下载第三方的http客户端。
$ cd /usr/local/openresty/lualib/resty/
$ wget https://raw.githubusercontent.com/pintsized/lua-resty-http/master/lib/resty/http_headers.lua
$ wget https://raw.githubusercontent.com/pintsized/lua-resty-http/master/lib/resty/http.lua
客户端站点:https://github.com/pintsized/lua-resty-http
$ cd /openresty-test/
$ mkdir lua
$ cd lua
vim http_test.lua
脚本内容:
local http = require("resty.http")
local httpc = http.new()
local resp, err = httpc:request_uri("http://s.taobao.com", {
method = "GET",
path = "/search?q=hello",
headers = {
["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36"
}
})
if not resp then
ngx.say("request error :", err)
return
end
ngx.status = resp.status
for k, v in pairs(resp.headers) do
if k ~= "Transfer-Encoding" and k ~= "Connection" then
ngx.header[k] = v
end
end
ngx.say(resp.body)
修改配置文件内容为下:
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
lua_package_path "lualib/?.lua;;";
lua_package_cpath "lualib/?.so;;";
server {
listen 6000;
location / {
default_type text/html;
lua_code_cache off;
content_by_lua_file lua/index.lua;
}
location /lua_http {
resolver 8.8.8.8;
default_type text/html;
lua_code_cache off;
content_by_lua_file lua/http_test.lua;
}
}
}
重起nginx服务,然后浏览器重新访问localhost:6000试试