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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 负电压转换芯片_芯片电路原理

    负电压转换芯片_芯片电路原理1.工作原理首先,我们了简单的分析一下电路的工作原理。4个MOS管,Q1,Q2一组,Q3,Q4一组。U1是15系列单片机,U2是一个反相器。前面的电容C1负责从电源搬运电荷,后面的电容C2负责存储电荷,并且对负载进行供电。当U1的P1.4口输出高电平时,Q1,Q2一组导通,Q3,Q4一组截止。+5V电源通过Q1,Q2为电容C1进行充电。当U1的P1.4口输出低电平时,Q3,Q4一组导通,Q1,Q2一组截止。+5V电源没有电流回路。C1充当电源进行放电,通过Q3,GND,C2,Q4对C2进..

    2022年8月10日
    8
  • sql第九章简答题_sql语句declare用法

    sql第九章简答题_sql语句declare用法文章目录第二十六章SQL命令DECLARE大纲参数描述游标名称通过游标更新示例第二十六章SQL命令DECLARE声明游标大纲DECLAREcursor-nameCURSORFORquery参数cursor-name-游标的名称,必须以字母开头,并且仅包含字母和数字。(游标名称不遵循SQL标识符约定)。游标名称区分大小写。它们受其他命名限制的约束,如下所述。query-定义游标结果集的标准SELECT语句。此选择可以包括%NOFPLAN关键字,以指定应忽略此查询的

    2022年8月20日
    4
  • VR全景图制作软件哪个最好?这3款App教你制作一张完美的VR全景照片「建议收藏」

    VR全景图制作软件哪个最好?制作360度全景效果图的软件现在市面上还是有很多的,不同的功能运用在不同的场景之中,生活中,装修设计的等等形式的全景图都有不同的软件可以帮助我们制作。AutodeskStitcher:点击左侧链接下载AutodeskStitcher是一款高品质专业级的全景图制作工具,与AdobePhotoshop无缝平滑对接,广泛用于图象编辑、3D网页、虚拟旅游和超大尺寸全景图印刷等。是专业摄影师、多媒体艺术家和摄影爱好者的必备利器。最新版本能够为业界很多领域提供优良的解决方案,

    2022年4月1日
    1.4K
  • Electron那些事10:本地数据库sqlite

    Electron那些事10:本地数据库sqlite【前言】上一节讲了本地日志,本地数据(文件)的部分,详见:Electron那些事09:本地数据_uikoo9的博客-CSDN博客虽然本地日志可以记录日志信息,本地数据可以记录简单的配置文件,但是像一些复杂的业务,需要维护一个本地数据库进行查询,本节讲一下本地数据库sqlite【sqlite】sqlite是有名的本地数据库,在很多系统中都有应用,SQLiteHomePage当然也有nodejs的版本,一般配套和electron使用,sqlite3-np…

    2022年5月11日
    59
  • Vue上传文件操作(没有CV,认真看)

    Vue上传文件操作(没有CV,认真看)项目场景: 通过vue上传文件基本操作问题描述:使用html上传文件时,很容易理解,那么vue文件上传呢?我们学了vue不可能还往里面写原生html的内容吧!先放代码再解释:<template><div><el-form:model=”form”><el-uploadaction=”url”:auto-upload=”false”:on-change=”onchanger”:fil

    2022年10月10日
    2
  • C# Winform 让整个窗口都可以拖动

    C# Winform 让整个窗口都可以拖动

    2021年8月19日
    70

发表回复

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

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