• Nginx之Openresty基本使用解读


    目录

    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/ 目录, 然后输入以下命令配置:

    1. ./configure --prefix=/usr/local/openresty
    2. make
    3. 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

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

    1. ./configure --prefix=/opt/openresty \
    2. --with-luajit \
    3. --without-http_redis2_module \
    4. --with-http_iconv_module \
    5. --with-http_postgres_module

    启动

    Service openresty start

    或者

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

    停止

    Service openresty stop

    Openresty基本使用

    测试lua脚本
    1. #在Nginx.conf 中写入
    2. location /lua {
    3. default_type text/html;
    4. content_by_lua '
    5. ngx.say("

      Hello, World!

      ")
    6. ';
    7. }
    外部分文件导入

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

            content_by_lua_file lua/hello.lua;
    

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

    1. server {
    2. listen 80;
    3. server_name localhost;
    4. location /lua {
    5. default_type text/html;
    6. content_by_lua_file lua/hello.lua;
    7. }
    8. }
    关闭缓存,开启热部署

    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性能表现。

    1. server{
    2.   lua_code_cache off; //关闭lua缓存 重启后生效
    3.   server_name localhost;
    4.   default_type 'text/plain';
    5.   content_by_lua_file /conf/lua/test.lua; //将lua程序用file文件加载
    6. }
    用lua代码获取系统变量

    http协议版本

    ngx.say("ngx.req.http_version : ", ngx.req.http_version(), "
    "
    )

    请求方法

    ngx.say("ngx.req.get_method : ", ngx.req.get_method(), "
    "
    )  

    原始的请求头内容

    ngx.say("ngx.req.raw_header : ",  ngx.req.raw_header(), "
    "
    )  

    body内容体

    ngx.say("ngx.req.get_body_data() : ", ngx.req.get_body_data(), "
    "
    )

    获取Nginx请求头信息

    1. local headers = ngx.req.get_headers()
    2. ngx.say("Host : ", headers["Host"], "
      "
      )
    3. ngx.say("user-agent : ", headers["user-agent"], "
      "
      )
    4. ngx.say("user-agent : ", headers.user_agent, "
      "
      )
    5. for k,v in pairs(headers) do
    6. if type(v) == "table" then
    7. ngx.say(k, " : ", table.concat(v, ","), "
      "
      )
    8. else
    9. ngx.say(k, " : ", v, "
      "
      )
    10. end
    11. end

    获取post请求参数

    1. ngx.req.read_body()
    2. ngx.say("post args begin", "
      "
      )
    3. local post_args = ngx.req.get_post_args()
    4. for k, v in pairs(post_args) do
    5. if type(v) == "table" then
    6. ngx.say(k, " : ", table.concat(v, ", "), "
      "
      )
    7. else
    8. ngx.say(k, ": ", v, "
      "
      )
    9. end
    10. end

  • 相关阅读:
    腻子粉怎么选?
    古人会“温酒”,为什么当代人喝酒不烫了?喝酒伤肝如何缓解?
    【Go语言如何用 interface 实现多态】
    web前端面试题附答案008-你项目中的TDK是怎么赋值的?(这道题很容易暴露项目经验)
    Ubuntu22.04 下 NFS 相关问题与完整配置(客户机 MacOS)
    小程序源码:恋爱小助手
    STM32进行LVGL裸机移植
    多相机一键同步拍摄Python&C++
    Freeswitch代码
    尚硅谷Spring教程学习笔记_入门案例(一)
  • 原文地址:https://blog.csdn.net/m0_62436868/article/details/133244384