Lua学习与Nginx整合
Posted 恒哥~Bingo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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/>")
以上是关于Lua学习与Nginx整合的主要内容,如果未能解决你的问题,请参考以下文章