在nginx中安装并调试OpenResty

标签: C&C++ C Nginx VSCode OpenResty | 发表时间:2021-11-01 00:00 | 作者:
出处:https://blog.hufeifei.cn/

OpenResty是基于Lua即时编译器(LuaJIT)对Nginx进行扩展的模块——最核心的就是 lua-nginx-module这个模块。其他的都是 OpenResty基于lua开发的相关模块,当然也可以基于lua开发自己的第三方模块。

所以要想使用OpenResty首先必须安装 lua-nginx-module

  1. 下载并安装LuaJIT。可以使用源码方式安装,这个可以参考 官方文档非常详细。这里为了方便直接用apt安装了

    1        
    sudo apt install luajit libluajit-5.1-dev        
  2. 下载 ngx_devel_kit模块

    1        
    2
    3
    4
    5
    6
    # 在nginx目录下创建一个modules目录        
    mkdir modules
    # 从github克隆模块代码
    git clone https://github.com/vision5/ngx_devel_kit/ modules/ngx_devel_kit
    # 切换到v0.3.1版本
    git checkout tags/v0.3.1 -b v0.3.1
  3. 下载 lua-nginx-module模块

    1        
    2
    git clone https://github.com/openresty/lua-nginx-module modules/ngx_http_lua_module        
    git checkout tags/v0.10.20 -b v0.10.20

    如果是使用alibaba/tengine,这个模块已经被包含在tengine的 modules/ngx_http_lua_module目录下了。

    另外注意 lua-nginx-module与nginx的兼容性,nginx1.6.0之前的版本是不支持的。

#编译nginx源码

  1. 如果需要对nginx进行debug的话,需要修改 /auto/cc/conf 文件,将 ngx_compile_opt="-c"修改为 ngx_compile_opt="-c -g"

    -g用来生成调试信息:详见 gcc文档

  2. 设置luajit的头文件和静态库的路径,ubuntu下可以用dpkg看看libluajit被安装到哪个目录了

    1        
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    $ dpkg -L libluajit-5.1-dev        
    /.
    /usr
    /usr/include
    /usr/include/luajit-2.1
    /usr/include/luajit-2.1/lauxlib.h
    /usr/include/luajit-2.1/lua.h
    /usr/include/luajit-2.1/lua.hpp
    /usr/include/luajit-2.1/luaconf.h
    /usr/include/luajit-2.1/luajit.h
    /usr/include/luajit-2.1/lualib.h
    /usr/lib
    /usr/lib/x86_64-linux-gnu
    /usr/lib/x86_64-linux-gnu/libluajit-5.1.a
    /usr/lib/x86_64-linux-gnu/pkgconfig
    /usr/lib/x86_64-linux-gnu/pkgconfig/luajit.pc
    /usr/share
    /usr/share/doc
    /usr/share/doc/libluajit-5.1-dev
    /usr/share/doc/libluajit-5.1-dev/copyright
    /usr/lib/x86_64-linux-gnu/libluajit-5.1.so
    /usr/share/doc/libluajit-5.1-dev/changelog.Debian.gz

    然后设置两个环境变量

    1        
    2
    export LUAJIT_LIB=/usr/lib/x86_64-linux-gnu/        
    export LUAJIT_INC=/usr/include/luajit-2.1/
  3. 执行 auto/configure

    1        
    2
    3
    4
    auto/configure --prefix=nginx \        
    --with-ld-opt="-Wl,-rpath,/usr/lib/x86_64-linux-gnu/" \
    --add-module=./modules/ngx_devel_kit \
    --add-module=./modules/ngx_http_lua_module
  4. 执行 make install

    编译过程可能会比较慢,可以执行 make -j2 && make install调大编译任务的个数

#调试OpenResty中的lua代码

首先你应该知道怎么调试Nginx,知道Nginx的多进程架构,这个可以看 上篇文章

首先需要关闭多进程架构,确保nginx运行在单个非守护进程,这样方便调试。

1      
2
3
daemon off;      
master_process off;
worker_processes 1;

这里以一个第三方的lua模板引擎为例—— lua-resty-template

#安装lua模块

1      
2
3
4
# 在nginx下创建一个放lua脚本的目录      
mkdir lua-lib
# 下载lua-resty-template模块
git clone https://github.com/bungle/lua-resty-template lua-lib/lua-resty-template

nginx.conf中对lua模块进行配置

1      
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
http {      
# ...
# 设置lua模块的路径
lua_package_path "lua-lib/lua-resty-template/lib/?.lua;;";

server {
listen 80;
server_name localhost;

set $template_root html/templates;
location /templates/ {
root html;
content_by_lua '
local template = require "resty.template"
template.render("view.html", { message = "Hello, World!" })
';
}
}
}

html/templates目录下添加模板文件

1      
2
3
4
5
6
<!DOCTYPE html>      
<html>
<body>
<h1>{{message}}</h1>
</body>
</html>

访问 localhost/templates/view.html,能看到下面的结果

lua template

相关 [nginx 调试 openresty] 推荐:

在nginx中安装并调试OpenResty

- - holmofy
OpenResty是基于Lua即时编译器(LuaJIT)对Nginx进行扩展的模块——最核心的就是. lua-nginx-module这个模块. 其他的都是 OpenResty基于lua开发的相关模块,当然也可以基于lua开发自己的第三方模块. 所以要想使用OpenResty首先必须安装 lua-nginx-module.

[转]推荐OpenResty - Nginx全能插件版

- - 天空极速
官网: http://openresty.org/. 虽然是中国人做的,但没几个汉字……. 我用Nginx,是这样一个过程:. 1、系统rpm中的nginx,能让其跑起来. OpenResty,是淘宝一位大牛(agentzh)集成的包含N多好插件的Nginx捆绑源码包,这位仁兄自称Nginx最活跃的第三方模块开发人员哦.

nginx源码分析--GDB调试

- - CSDN博客架构设计推荐文章
利用gdb[i]调试nginx[ii]和利用gdb调试其它程序没有两样,不过nginx可以是daemon程序,也可以以多进程运行,因此利用gdb调试和平常会有些许不一样. 当然,我们可以选择将nginx设置为非daemon模式并以单进程运行,而这需做如下设置即可:. master_process off; 这是第一种情况:.

nginx学习研究(一)安装启动及调试

- - CSDN博客推荐文章
序:从今天开始研究nginx. 主要是工作中用到大量的nginx的安装调试及优化,希望可以系统的记录一下,以备以后不时之需. 对于nginx不建议使用源来安装,最好自己编译. 因为一般来说使用nginx的项目都比较灵活,而且基本上不同平台或系统的批量部署比较多. 通过编辑安装可以比较效率的按照自己想要的方式进行批处理.

用gdb调试找出nginx崩溃的原因

- - 鲁塔弗的博客
某年某月某日,一个工程师跑来找我说:很多用户抱怨APP频繁闪退,他觉得server运行正常,找不出原因,请我帮忙. 按照流程一路排查下去,发现nginx访问日志里面有大量的http 504 err code. 同时出现大量的类似错误信息. 出现segfault那只能用gdb了,这也是Linux做server的好处了,换成微软平台,无比的麻烦.

在 OpenResty 里实现进程间通讯

- - SegmentFault 最新的文章
在 Nginx 里面,每个 worker 进程都是平等的. 但是有些时候,我们需要给它们分配不同的角色,这时候就需要实现进程间通讯的功能. 一种简单粗暴但却被普遍使用的方案,就是每个进程划分属于自己的 list 类型的 shdict key,每隔一段时间查看是否有新消息. 这种方式优点在于实现简单,缺点在于难以保证实时性.

openresty+lua实现WAF应用防火墙

- - C1G军火库
pcre没找到,编辑时加上–with-pcre=../pcre-8.30 \. 4.下载ngx_cache_purge清缓组件. 伪装openresty为xcdn. 4.下载和配置 ngx_lua_waf. nginx下常见的开源 waf 有 mod_security、naxsi、ngx_lua_waf 这三个,ngx_lua_waf 性能高和易用性强,基本上零配置,而且常见的攻击类型都能防御,是比较省心的选择.

linux、mysql、nginx、tomcat 环境下压力测试的主要调试参数

- - SegmentFault 最新的文章
一、linux 系统内核参数. /etc/sysctl.conf文件常用参数. net.core.netdev_max_backlog = 32768 #允许送到队列的数据包的最大数目 net.core.rmem_max = 8388608. #SOCKET读缓存区大小 net.core.wmem_max = 8388608.

Openresty+Lua+Redis灰度发布 - K‘e0llm - 博客园

- -
灰度发布,简单来说,就是根据各种条件,让一部分用户使用旧版本,另一部分用户使用新版本. 百度百科中解释:灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式. AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面 来.

nginx配置ssl

- - 邢红瑞的blog
先生成网关证书 ,仿照CA模式.