Nginx 集成 lua 模块扩展功能,以及遇到的一些问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx 集成 lua 模块扩展功能,以及遇到的一些问题相关的知识,希望对你有一定的参考价值。
参考技术A 时间 2021-11-18文章中使用的服务器环境为 CentOS 7.6 阿里云的镜像, nginx 为 yum 安装的1.20.1版本, luajit 这个是lua 的编译器 版本为 2.0.2, lua-nginx-module 版本为0.10.15
成功打印hello word
nginx + lua 可以直接把nginx的可扩展性拉上了一个不敢想象的层次,你可以使用各种lua的模块来实现一些复杂的功能,使nginx成为一个可以都独当一面的存在。喜欢折腾而且nginx已经运行一段时间的可以使用以上的方法,如果初次接触nginx就有这方面的需求的话建议直接使用 OpenResty® - 中文官方站 国人大佬开发的一个基于 nginx + lua 的web平台,可以省去折腾的麻烦。
Lua学习与Nginx整合
Openresty简介
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 等都进行一致的高性能响应。
Openresty安装
Centos为例
预编译安装
yum install yum-utils
yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
yum install openresty
源码编译安装
1. 下载源码包 http://openresty.org/cn/download.html
2. 解压后,进入目录执行配置命令
./configure
3. 执行编译命令后,出现目录/usr/local/openresty
make && make install
使用入门
-
修改/etc/profile,配置nginx环境变量
PATH=/usr/local/openresty/nginx/sbin:$PATH
export PATH -
使profile生效
source /etc/profile -
启动nginx
nginx
-
修改配置文件/usr/local/openresty/nginx/conf/nginx.conf
server listen 8080; location / default_type text/html; content_by_lua_block ngx.say("<p>hello, world</p>")
-
重启nginx
nginx -s reload
-
测试
curl http://localhost:8080
使用进阶
引入lua脚本
在conf目录中新建lua/hello.lua
ngx.say("<h1>Hello Lua!!</h1>")
修改nginx.conf
server
listen 8080;
location /lua
default_type text/html;
content_by_lua_file conf/lua/hello.lua;
获得URI中的单个变量
修改hello.lua
ngx.say(ngx.var.arg_a)
arg_a能获得参数a的值
http://192.168.7.188:8080/lua?a=zhangsan
获得URI中的所有变量
修改hello.lua
local uri_args = ngx.req.get_uri_args()
for k, v in pairs(uri_args) do
if type(v) == "table" then
ngx.say(k, " : ", table.concat(v, ", "), "<br/>")
else
ngx.say(k, ": ", v, "<br/>")
end
end
可以在网页输出所有参数列表
http://192.168.7.188:8080/lua?a=22&b=33&c=88
获得请求头信息
local headers = ngx.req.get_headers()
ngx.say("Host : ", headers["Host"], "<br/>")
ngx.say("user-agent : ", headers["user-agent"], "<br/>")
ngx.say("user-agent : ", headers.user_agent, "<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
获得POST请求的参数
ngx.req.read_body()
ngx.say("post args begin", "<br/>")
local post_args = ngx.req.get_post_args()
for k, v in pairs(post_args) do
if type(v) == "table" then
ngx.say(k, " : ", table.concat(v, ", "), "<br/>")
else
ngx.say(k, ": ", v, "<br/>")
end
end
获得其他内容
http协议版本
ngx.say("ngx.req.http_version : ", ngx.req.http_version(), "<br/>")
请求方法
ngx.say("ngx.req.get_method : ", ngx.req.get_method(), "<br/>")
原始的请求头内容
ngx.say("ngx.req.raw_header : ", ngx.req.raw_header(), "<br/>")
body内容体
ngx.say("ngx.req.get_body_data() : ", ngx.req.get_body_data(), "<br/>")
以上是关于Nginx 集成 lua 模块扩展功能,以及遇到的一些问题的主要内容,如果未能解决你的问题,请参考以下文章