OpenResty 最佳实践学习–实战演习笔记(2)

在前面一篇中已经介绍了Openresty的相关知识和一个简单的hello world的访问。本篇依然是延续上一篇进行讲解。 需要提前申明的是我环境有问题。重新安装了一次openresty,这次安装的目录和上一次不一样了。一:环境说明:虚拟机 :CentOs 6.3 32位OpenResty 安装目录 : /opt/openresty/版本: /opt/openresty/nginx/sbi

大家好,又见面了,我是全栈君。

在前面一篇中已经介绍了Openresty的相关知识和一个简单的hello world的访问。本篇依然是延续上一篇进行讲解。
需要提前申明的是我环境有问题。重新安装了一次openresty,这次安装的目录和上一次不一样了。

一:环境说明:

虚拟机 :CentOs 6.3 32位
OpenResty 安装目录 : /opt/openresty/
版本: 
/opt/openresty/nginx/sbin/nginx -V
nginx version: openresty/1.11.2.5
built by gcc 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) 
built with OpenSSL 1.0.0-fips 29 Mar 2010
TLS SNI support enabled
configure arguments: --prefix=/opt/openresty/nginx 

二:实战演习

1、使用content_by_lua 和 content_by_lua_file

[dufy@localhost nginx]$ pwd
/opt/openresty/nginx
[dufy@localhost nginx]$ ls
client_body_temp  conf  fastcgi_temp  html  learn_lua  logs  proxy_temp  readme  sbin  scgi_temp  uwsgi_temp
[dufy@localhost nginx]$ 

# /opt/openresty/nginx 目录下文件简单介绍
#learn_lua :我新建的一个文件目录(linux中没有文件夹改变,一切皆文件),用来保存lua文件
#其他目录安装默认生成的,具体就不一一进行讲解,后面用到在说明

在测试之前启动openresty服务,和nginx相同,修改nginx.conf文件也要重启或者reload。

#启动命令
sudo /opt/openresty/nginx/sbin/nginx -c /opt/openresty/nginx/conf/nginx.conf -p /opt/openresty/nginx/
#重新加载命令
sudo /opt/openresty/nginx/sbin/nginx -c /opt/openresty/nginx/conf/nginx.conf -p /opt/openresty/nginx/ -s reload

#sudo :系统管理员让普通用户执行一些或者全部的root命令的一个工具

(1):测试1:content_by_lua

content_by_lua  :意思是内容中包含的是lua脚本

content_by_lua 这个在上一篇已经讲过了,这里在提一下,
conf 目录备份nginx.conf ,然后在server 中添加如下代码块:

#第一个lua 的 hello world
    location /hello{
       default_type text/html;
       content_by_lua '
            ngx.say("<h1>Hello Wolrd !!</h1>")
        ';
    }

测试脚本:

[dufy@localhost nginx]$ curl http://localhost:8080/hello
<h1>Hello Wolrd !!</h1>

(2)使用content_by_lua_file 引入一个lua文件

content_by_lua_file  :意思是内容中包含的是lua脚本文件

在 learn_lua 目录下面新建一个 hello.lua 文件,文件内容:

ngx.say("<h1>Hello Wrold !! Lua</h1>")

在 nginx.conf 的server中添加如下代码块:

#第一个 Nginx lua的 hw
    location /hello_lua{
       content_by_lua_file learn_lua/hello.lua;
    }

测试脚本:

[dufy@localhost nginx]$ curl http://localhost:8080/hello_lua
<h1>Hello Wrold !! Lua </h1>

(3):lua_code_cache使用

lua_code_cache : 调试的环境使用,方便快速的调试代码,不用重新启动服务!
默认 是on,关闭使用 off ,即lua_code_cache off
可以配置在http server location 块中!

开启这个功能,启动openresty的时候,控制台会提示如下信息:

nginx:  lua_code_cache is off; this will hurt performance in /opt/openresty/nginx/conf/nginx.conf:46

演示示例:修改nginx.conf 在server块中添加

lua_code_cache off

然后修改 hello.lua为下面的内容!

ngx.say("<h1>Hello Wrold !! Lua,I change </h1>")
ngx.say("THis is a settings lua_code_cache off")

不重启服务,然后访问地址,查看测试结果:

[dufy@localhost nginx]$ curl http://localhost:8080/hello_lua
<h1>Hello Wrold !! Lua,I change </h1>
THis is a settings lua_code_cache off


如果不加这个参数的话,修改了hello.lua文件内容,如果不重启服务,那么无法加载修改的内容,这里说的只是lua脚本文件。
记住如果修改了nginx.conf,还是要重新服务的。(可以自行验证)
原因是:使用的缓存数据。所以生产环境这个参数一定不要关闭,否则影响性能!

2、一个简单的Lua小例子

这个例子也是来自OpenResty 最佳实践学习 ,lua的语法这里暂时不做讲解,需要的可以自行了解。我后面也会整理lua语言的一些知识。

在 learn_lua的目录中新建 的 get_random_string.lua

-- 定义变量
local args = ngx.req.get_uri_args()
local salt = args.salt
--判断变量是否存在,不存在则返回错误码
if not salt then
    ngx.exit(ngx.HTTP_BAD_REQUEST)
end
-- 使用md5加密 ,其中 .. 表示 + 的意思
local string = ngx.md5(ngx.time() .. salt)
-- 输出结果: ngx.say() ;相关于java中的System.out.print();
ngx.say(string)
-- 下面这一句,dufy_test没有定义,会返回 nil
ngx.say(dufy_test)

ngx.req.get_headers:获取请求头,默认只获取前100,如果想要获取所以可以调用ngx.req.get_headers(0);获取带中划线的请求头时请使用如headers.user_agent这种方式;如果一个请求头有多个值,则返回的是table;

ngx.req.get_uri_args:获取url请求参数,其用法和get_headers类似;

在 nginx.conf 的server中添加的:

    #一个随机字符串的lua 脚本
    location  /get_random_string{
        content_by_lua_file learn_lua/get_random_string.lua;

    }

验证结果:

[dufy@localhost nginx]$ curl http://localhost:8080/get_random_string?salt=1
edeaff17db2e181d8589aa32bbdfcf6f
nil

# 通过 ngx.req.get_uri_args() 获取 salt=1 ,后面的args.salt = 1;

如果发生错误,结果不对,比如lua 脚本中的 ngx.req.get_uri_args() 写成 ngx.req_uri_args(),去查logs/error.log日志,可以查到错误信息:

2017/11/08 01:35:39 [error] 2054#0: *3 lua entry thread aborted: runtime error: /opt/openresty/nginx/learn_lua/get_random_string.lua:2: attempt to call field 'req_uri_args' (a nil value)

只要在开发中出现错误,进行错误排查的时候,就去看error.log日志的输出!

本次整理就到这里,如果需要关注更多的Lua_nginx模块的一些参数。请参考
https://www.nginx.com/resources/wiki/modules/lua/



如果您觉得这篇博文对你有帮助,请点个赞,谢谢!


如果帅气(美丽)、睿智(聪颖),和我一样简单善良的你看到本篇博文中存在问题,请指出,我虚心接受你让我成长的批评,谢谢阅读!
祝你今天开心愉快!


欢迎访问我的csdn博客,我们一同成长!

不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!

博客首页http://blog.csdn.net/u010648555

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121126.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何检测wifi信号强度以及辐射强度_wifi信号强度标准

    如何检测wifi信号强度以及辐射强度_wifi信号强度标准原文网址:http://jingyan.baidu.com/article/90895e0fe9616164ec6b0b88.html当我们在使用wifi上网时,在某些角落会出现无wifi信号,或是时

    2022年8月2日
    4
  • MyBatis 所有的 jdbcType类型

    MyBatis 所有的 jdbcType类型MyBatis处理MySQL字段类型date与datetime1)DATETIME显示格式:yyyy-MM-ddHH:mm:ss时间范围:[‘1000-01-0100:00:00’到’9999-12-3123:59:59’]2)DATE显示格式:yyyy-MM-dd时间范围:[‘1000-01-01’到’9999-12-31’]3)TIMESTAMP显示格式:yyyy-MM-ddHH:mm:ss时间范围:[‘1970-01-0100:00:00’到’2037-12-

    2022年10月20日
    0
  • 字符串匹配算法综述论文_多字符串匹配

    字符串匹配算法综述论文_多字符串匹配字符串匹配算法综述字符串匹配算法综述:BF、RK、KMP、BM、Sunday字符串匹配算法,是在实际工程中经常遇到的问题,也是各大公司笔试面试的常考题目。此算法通常输入为原字符串(string)和子串(pattern),要求返回子串在原字符串中首次出现的位置。比如原字符串为“ABCDEFG”,子串为“DEF”,则算法返回3。常见的算法包括:BF(BruteForce,暴力检索)、RK(R…

    2022年8月21日
    3
  • 越权漏洞(IDOR)测试技巧「建议收藏」

    越权漏洞(IDOR)测试技巧「建议收藏」文章目录一、IDOR介绍二、常见的测试技巧1.改变HTTP请求方法2.路径穿越绕过3.改变Content-type(内容类型)4.用数字ID替换非数字5.大小写替换绕过6.用通配符替换ID7.给Web应用提供一个请求ID,哪怕它没作要求8.HTTP参数污染,为同一参数提供多个值。9.更改文件类型。添加不同的文件扩展名(例如.json,.xml,.config)10.JSON参数污染11.在请求体用数组包装参数值12.尝试不同版本的API三、总结一、IDOR介绍IDOR,InsecureDire.

    2022年6月12日
    55
  • MATLAB笔记—绘制三维图像「建议收藏」

    MATLAB笔记—绘制三维图像「建议收藏」记录几个MATLAB中绘制三维图像的常用函数1.plot3(x,y,z)需要注意的是当你要绘制由线段连接的一组坐标,那么就将x、y、z指定为相同长度的向量。要在同一组坐标轴上绘制多组坐标,那么就将x、y、z中的至少一个指定为矩阵,其他指定为向量。现在通过几个实例看一下绘制效果t=linspace(-10,10,1000);xt=exp(-t./10).*sin(5*t);yt=exp(-t./10).*cos(5*t);p=plot3(xt,yt,t);p.Line

    2022年10月26日
    0
  • extremecomponents 配置

    extremecomponents 配置1.从http://www.extremecomponents.org下载最新版    2.把extremecomponents.jar放入web-inf/lib    3.根据minum,导出excel或导出pdf的需要,把/lib下的jarcopy到web-inf/lib    4.把images里的图片放入web的任意目录    5.把css文件放到we

    2022年8月20日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号