基于OpenResty用Lua语言实现简单服务

基于OpenResty用Lua语言实现简单服务

  • 解压进入文件

  • 分析目录结构
    • 相比Nginx源代码目录相比少了很多东西,少了的东西在bundle目录下。build是编译后生成的目标中间文件
    • 在bundle目录中有很多模块,最核心的是Nginx源代码,nginx-相应的版本中,当前的openresty基于nginx-1.15-8这个版本进行二次开发。
  • 其他的目录,这些模块又分为两类
    • 第一类是nginx的第三方模块,是C代码的模块,他们通常是以nginx打头的
    • 第二类是Lua模块,是Lua代码,它需要使用第一类的C模块,比如ngx-lua-0.10.15提供的功能
  • 我们编译的时候主要在编译C模块

  • 查看configure脚本帮助文件
    • 和nginx帮助文件基本没有太大的不同,只不过openresty集成了很多第三方模块
    • 前缀带有without是默认是内置在编译版本中的
    • 前缀带有with是默认是没有在编译版本中的

编译

  • 需要OpenSSL路径或者解压编译路径

 ./configure --prefix=/home/openresty --with-openssl=/usr/local/src/openssl-1.0.2t
  • gmake
  • gmake install
  • 如果已经安装过openresty了,这个时候可以把nginx的二进制文件拷贝到openresty的nginx的sbin版本中,做一次热部署/热升级。

添加Lua代码

  • 在nginx.conf 中实际是可以直接添加Lua代码,但是不能把Lua的语法Lua的源代码直接放在conf中,因为nginx的解析器它的配置语法是跟Lua代码时不相同的。
  • 在openresty的nginx lua模块中,它提供了几条指令,其中有一条指令是content_by_lua
  • content_by_lua是在http请求处理的内容生成阶段,我们用Lua代码来处理。

  • openresty的Lua模块中提供了一些API 如ngx.say,会去生成http响应,浏览器在发起http请求中,它会在User-Agent这样的head中,去添加当前浏览器的类型,我是xxx,我用了什么样的内核,用ngx.req.ge_headers把用户请求中的头部取出来,然后找出User-Agent,把User-Agent值通过这样一种文本方式返回给浏览器中
location /lua{
                default_type text/html;
                content_by_lua '
ngx.say("User-Agent: ",ngx.req.get_headers()["User-Agent"])
                ';
        }

        location /{
        
            alias html/asinmy;
        }
  • 通过openresty的nginx lua模块,我们可以用它提供给我们的API完成很多功能,我们可以利用Lua本身的一些工具库把Lua语言添加进来参加我们生成响应的这样一个过程中。
  • 直接使用openresty提供的API或者Lua代码生成响应,为浏览器客户端提供服务。
  • 我们可以使用Lua语言以及提供的相应的API库直接去访问Redis,Mysql,Tomcat等这样的服务,然后把不同的响应通过程序逻辑组成相应的http响应返回给用户

猜你喜欢

转载自blog.csdn.net/baidu_41388533/article/details/106843214