openresty安装

openresty官网:http://openresty.org/cn/

openresty官方安装文档:http://openresty.org/cn/installation.html

github地址:https://github.com/openresty

安装前准备,必须安装perl、libpcre、libssl库。

可以用如下命令查看安装情况

cpp 复制代码
sudo ldconfig -v
 sudo apt install libpcre3-dev libssl-dev perl make build-essential curl libreadline-dev libncurses5-dev

到官网下载源码openresty-1.25.3.1后:

cpp 复制代码
 ./configure
sudo make && make install
cd /usr/local/openresty

默认会被安装到/usr/local/openresty目录下

启动Nginx

cpp 复制代码
sudo /usr/local/openresty/nginx/sbin/nginx
ps -ef | grep nginx

查看版本:

cpp 复制代码
/usr/local/openresty/nginx/sbin/nginx -v

编写第一个hellow

OpenResty 是一个基于 NGINX 的全功能 Web 平台,集成了大量的第三方模块和库,其中最重要的是 ngx_lua 模块,它允许在 NGINX 配置中嵌入 Lua 脚本,实现高级的请求处理逻辑、动态内容生成、访问控制等功能。下面是一个简单的OpenResty 示例:

cpp 复制代码
sudo vim /usr/local/openresty/nginx/conf/nginx.conf
cpp 复制代码
server {
        listen       80;
        server_name  localhost;
        location /test {
                default_type 'text/plain'; #加这一句使得可以显示在网页上,如果只有下面代码,那么浏览器访问只会下载文件爱包含这句话。
                content_by_lua_block {
                                        ngx.say("Hello sherlock!, LuaJIT!")
                                     }
                        }
        #charset koi8-r;
        #...伪代码
}
cpp 复制代码
sudo /usr/local/openresty/nginx/sbin/nginx -t //检查以上配置文件的语法
sudo /usr/local/openresty/nginx/sbin/nginx -s reload //加载配置文件, 这里不是重启

访问:

cpp 复制代码
curl -v http://127.0.0.1/test

返回:

Hello sherlock!, LuaJIT!

网页访问:http://127.0.0.1:80/test

显示:

Hello sherlock!, LuaJIT!

以上配置了一个监听 80 端口的 server 块,处理 example.com 的请求。

当访问路径 /test 时,通过 content_by_lua_block 指令执行 Lua 代码,输出 "Hello sherlock!, LuaJIT!"。

这只是一个最简单的演示,OpenResty 的强大之处在于它允许在 NGINX 配置中使用 Lua 脚本,从而实现更复杂的逻辑。以下是一个稍复杂的示例,演示了如何通过 OpenResty 实现简单的 API 访问控制:

cpp 复制代码
http {
    lua_shared_dict my_limit 10m;

    server {
        listen 80;
        server_name api.example.com;

        location /api {
            access_by_lua_block {
                local limit = ngx.shared.my_limit
                local key = ngx.var.remote_addr
                local reqs, err = limit:get(key)
                if reqs then
                    if reqs > 10 then
                        ngx.exit(ngx.HTTP_TOO_MANY_REQUESTS)
                    else
                        limit:incr(key, 1)
                    end
                else
                    limit:set(key, 1, 60)
                end
            }

            default_type 'application/json';
            content_by_lua_block {
                ngx.say('{"message": "API response"}')
            }
        }
    }
}

在这个示例中:

配置了一个共享内存字典 my_limit 用于存储请求计数。

当访问路径 /api 时,通过 access_by_lua_block 指令执行 Lua 代码,实现了一个简单的请求频率限制,每个 IP 地址在 60 秒内最多允许 10 次请求。

如果超过请求限制,将返回 HTTP 429 (TOO MANY REQUESTS) 状态码;否则,继续执行后续 Lua 代码返回 JSON 响应。

这只是 OpenResty 的一小部分功能展示,实际使用中可以结合更多的模块和功能,如 ngx_http_lua_upstream、ngx_http_headers_more、ngx_stream_lua 等,以实现更复杂的 Web 应用和服务。

更多示例,参考:OpenResty 介绍与实战讲解(nginx&lua)

相关推荐
杨了个杨89822 分钟前
Tengine与OpenResty
openresty
曹天骄22 分钟前
OpenResty 源站安全隔离设计在边缘计算架构中的工程实践
安全·边缘计算·openresty
快乐肚皮5 天前
OpenResty:Nginx的进化之路
nginx·junit·openresty
landonVM7 天前
OpenResty 的性能优化配置建议
性能优化·openresty
我发在否16 天前
OpenResty > Lua断点调试
vscode·lua·断点·openresty·luapanda
oMcLin22 天前
如何在 CentOS 7 上通过配置和调优 OpenResty,提升高并发 Web 应用的 API 请求处理能力?
前端·centos·openresty
笑笑�1 个月前
OpenResty + nginx_upstream_check_module 构建主动健康检查模块
运维·nginx·负载均衡·openresty
Wang's Blog1 个月前
Lua: Web应用开发之OpenResty与Lapis框架深度指南
lua·openresty
驯龙高手_追风1 个月前
OpenResty+NtripCaster实现挂载点负载均衡使用初探
junit·负载均衡·openresty
秃了也弱了。1 个月前
OpenResty+redis实现基于ip的代理层灰度发布
redis·tcp/ip·openresty