大家好,又见面了,我是全栈君。
在前面一篇中已经介绍了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账号...