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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • pycharm2021年激活码(破解版激活)

    pycharm2021年激活码(破解版激活),https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • linux vim复制粘贴命令_在Linux如何复制

    linux vim复制粘贴命令_在Linux如何复制将光标移动到复制的起始位置,按一下大写V或小写v,(大写V是整行,小写是光标处),然后上下左右将光标移动到复制的末尾,然后按下y,移动到要粘贴的位置,按下大写P或小写p(大写P:光标之前粘贴,小写p光标之后粘贴);总结:光标处起始处——按V/v——移动到复制的末尾处——按y——光标移到想粘贴的地方——按P/p;想要剪切的话,把y换成dd;…

  • 机器学习常见的采样方法[通俗易懂]

    机器学习常见的采样方法[通俗易懂]我们在训练模型的过程,都会经常进行数据采样,为了就是让我们的模型可以更好的去学习数据的特征,从而让效果更佳。但这是比较浅层的理解,更本质上,数据采样就是对随机现象的模拟,根据给定的概率分布从而模拟一个

  • DOS 和 Linux 常用命令的对比

    DOS和Linux常用命令的对比许多在shell提示下键入的Linux命令都与你在DOS下键入的命令相似。事实上,某些命令完全相同。本附录提供了Windows的DOS提示

    2021年12月26日
  • 盘点开发中那些常用的MySQL优化

    盘点开发中那些常用的MySQL优化

  • DNS负载均衡与CDN内容分发技术

    DNS负载均衡与CDN内容分发技术负载均衡:负载均衡技术能平衡服务器及群众所有的服务器和请求应用之间的通信负载,根据实时响应时间进行判断,将任务交由负载最轻的服务器来处理,以实现真正的智能通信管理和最佳的服务器群性能,从而使网站始终保持运行和保证其可访问性。DNS负载均衡:为了充分利用现有服务器软件的种种优势,负载均衡最好是在服务器软件之外来完成。而最早使用的负载均衡技术是通过DNS服务中的随即名字解析来实现的。这就是

发表回复

您的电子邮箱地址不会被公开。

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