安装
version: "3"
services:
nginx_lua:
image: openresty/openresty:alpine
#image: openresty/openresty:latest #没有安装opm
以下命令可以在Dockerfile编写, 前缀以RUN补充,使其创建新的镜像
或者在运行后,进容器后直接运行
安装opm
curl -L -o /usr/local/bin/opm https://raw.githubusercontent.com/openresty/opm/master/opm && chmod +x /usr/local/bin/opm
安装基础工具,以避免以下面的报错
apk add --no-cache bash perl curl
#openresty:alpine版本的包管理工具apk,如使用latest,包管理工具是apt
报错1:
$ opm -h
can’t execute ‘perl’: No such file or directory
报错2:
ERROR: failed to find package: server error: sh: curl: not found
通过opm去查找依赖库
7793bfb21d5b:/# opm search base64
openresty/lua-resty-core New FFI-based Lua API for the ngx_lua module
bungle/lua-resty-nettle Nettle (a low-level cryptographic library) Bindings for LuaJIT FFI
bungle/lua-resty-session Session Library for OpenResty - Flexible and Secure
jprjr/luasodium An FFI binding to libsodium.
GUI/lua-resty-txid Generate sortable, unique transaction or request IDs.
xiaocang/lua-resty-openssl FFI-based OpenSSL binding for LuaJIT
fffonion/lua-resty-openssl FFI-based OpenSSL binding for LuaJIT
fffonion/lua-resty-acme Automatic Let's Encrypt certificate serving and Lua implementation of ACME procotol
hamishforbes/lua-resty-consul Library to interface with the consul HTTP API
lilien1010/lua-resty-s3uploader an http s3 client for openresty
duhoobo/lua-resty-smtp A http to smtp bridge library for the ngx_lua module
安装时,需要加上account name
7793bfb21d5b:/# opm install lua-resty-random
ERROR: package name lua-resty-random is not prefixed by an account name.
nginx里使用lua
- 正常的响应: ngx.say(“Hello, OpenResty!”)
- 重定向: ngx.redirect(long_url, ngx.HTTP_MOVED_PERMANENTLY)
- 生成随机数:
local random_bytes = {}
for i = 1, 6 do
table.insert(random_bytes, string.char(math.random(0, 255)))
end
random_bytes = table.concat(random_bytes)
- Base64编码: ngx.encode_base64(random_bytes)
- 截取前5个字符: string.sub(encoded_bytes, 1, 5)
- table将k-v加入res对象: table.insert(result, key … ", " … value)
- table合并为字符串: table.concat(result, “\n”)
redis相关操作
- 引入redis
local redis = require("resty.redis")
local red = redis:new()
- 连接redis
red:connect("192.168.0.xx", 6379)
- redis写入,并设置key7天过期
local saved, err = red:setex(key, 604800, long_url)
- redis读取
local long_url, err = red:get("code:" .. code)
- 关闭Redis连接
local ok, err = red:set_keepalive(10000, 100)
server {
listen 80;
server_name 0.0.0.0;
location / {
default_type text/html;
content_by_lua_block {
ngx.say("Hello, OpenResty!")
}
}
location /s/ {
# 使用Lua模块
content_by_lua_block {
-- 执行重定向
return ngx.redirect("http://example.com", ngx.HTTP_MOVED_PERMANENTLY)
}
}
location /s/create {
# 使用Lua模块
content_by_lua_block {
local redis = require("resty.redis")
local red = redis:new()
-- 连接到Redis服务器
local ok, err = red:connect("192.168.0.xx", 6379)
if not ok then
ngx.log(ngx.ERR, "Failed to connect to Redis: ", err)
return ngx.exit(500)
end
# ok = 1
ngx.log(ngx.INFO, "connect to Redis: ", ok)
ngx.say("Hello, OpenResty!")
}
}
}