Nginx之Openresty基本使用解读

举报
yd_249383650 发表于 2023/10/30 15:06:10 2023/10/30
【摘要】 ​ 目录Openresty基本介绍Openresty源码编译安装Openresty基本使用测试lua脚本外部分文件导入关闭缓存,开启热部署用lua代码获取系统变量Openresty基本介绍OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用...

 

目录


Openresty基本介绍

Openresty源码编译安装

Openresty基本使用

测试lua脚本

外部分文件导入

关闭缓存,开启热部署

用lua代码获取系统变量



Openresty基本介绍

OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

OpenResty 官网地址:https://openresty.org/cn/。

OpenResty主要包含两方面的技术:

  • Nginx: 一个免费的、开源的、高性能的 HTTP 服务器和反向代理,也是一个电子邮件(IMAP/POP3/SMTP)代理服务器。有关Nginx的介绍,可以查看这篇《Nginx架构原理科普》。
  • Lua: 一种轻量、小巧、可移植、快速的脚本语言;LuaJIT即时编译器会将频繁执行的Lua代码编译成本地机器码交给CPU直接执行,执行效率更高,OpenResty会默认启用LuaJIT。

Openresty源码编译安装

下载地址:OpenResty - 下载

编辑

最小版本基于nginx1.21

然后在进入 openresty-VERSION/ 目录, 然后输入以下命令配置:

./configure --prefix=/usr/local/openresty
make
make install

默认, --prefix=/usr/local/openresty 程序会被安装到/usr/local/openresty目录。

依赖 gcc openssl-devel pcre-devel zlib-devel

安装:yum install gcc openssl-devel pcre-devel zlib-devel postgresql-devel

可以指定各种选项,比如:

./configure --prefix=/opt/openresty \

           --with-luajit \

           --without-http_redis2_module \

           --with-http_iconv_module \

           --with-http_postgres_module

启动

Service openresty start

或者

cd /usr/local/openresty/nginx/sbin
./nginx -c /usr/local/openresty/nginx/conf/nginx.conf	#启动前修改配置文件端口号以防和原nginx冲突

停止

Service openresty stop

Openresty基本使用

测试lua脚本

   #在Nginx.conf 中写入
   location /lua {

        default_type text/html;
        content_by_lua '
           ngx.say("<p>Hello, World!</p>")
         ';
    }

外部分文件导入

如果想不在配置文件写lua,可以引入lua文件:nginx目录下的lua/hello.lua

        content_by_lua_file lua/hello.lua;

创建配置文件lua.conf(没必要采用引入方式,直接在nginx配置文件中写location /lua 即可)

server {
   listen       80;
   server_name  localhost;

   location /lua {
        default_type text/html;
        content_by_lua_file lua/hello.lua;
    }
}

关闭缓存,开启热部署

nginx+lua开发时因为已经加载进内存,修改lua脚本不会起作用,这样不方便调试。nginx配置中将lua_code_cache配置成on/off来控制是否关闭lua 的cache缓存,如果设置为off.则每次修改lua脚本都会重新加载新的lua代码,从而实现快速调试响应。同时状态为off时启动或重启nginx都会提示:nginx: [alert] lua_code_cache is off; this will hurt performance in /path/to/nginx.conf。因为这会影响nginx性能表现。

server{
  lua_code_cache off; //关闭lua缓存 重启后生效
  server_name localhost;
  default_type 'text/plain';
  content_by_lua_file /conf/lua/test.lua; //将lua程序用file文件加载
}

用lua代码获取系统变量

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请求头信息

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


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。