当前位置: 首页 > web服务器, 未分类 > 正文

Nginx使用lua执行linux脚本文件

通常情况下;PHP服务器会对一些特殊的函数进行屏蔽(如:CHMOD),或者开启安全模式; 但有时候在动态脚本的时候需要实现执行脚本,或设置权限等操作;就没法进行了; 这种服务器配置是为了安全期间;以防被上传的PHP代码或一些其它漏洞(如:eval等)恶意执行破坏性较大的操作.

所以本文通过Nginx的lua模块来实现linux的sh脚本文件:

		location /swith_dev_lua {
			default_type 'text/plain';
			content_by_lua '
				local log="/home/Www/xxx/swith_dev/bash/bash.log"
				local shellfile="/home/Www/xxx/swith_dev/bash/bash"
				local status = os.execute ("/bin/bash "..shellfile.." > "..log.." 2>&1");
				local message=""
				local file = io.open(log,"r")
				if file then
					for line in file:lines() do
							message=message..line			
					end
				end
				ngx.say([[{"status" :"]].. status ..[[","message":"]].. ngx.encode_base64(message) ..[["}]]);
			';
		}

在server模块下面使用location配置项指定一个路径,如第一行路径为switch_dev_lua,就表示在访问站点switch_dev_lua(如:http://URL/switch_dev_lua)就会执行相应location下所定义的配置

content_by_lua 后用单引号来引用lua语言,至于nginx的lua模块的使用可以参考以下手册:http://wiki.nginx.org/HttpLuaModule

单引号里面的是lua语言; ngx.say()方法是对外输出字符串,os.execute()方法是lua语言执行外部命令的一个方法,只有一个参数,用于表示需要执行的命令,改函数返回的是一个数值类型,当执行成功后返回零,非零的值都是执行失败,而标准的输出和错误输出是需要通过在执行命令时候重定向到一个日志文件中,然后获取日志文件中的内容从而得到命令执行的详细状况;

有关于lua语言的一些详细的用法可以参考其官方文档:http://www.lua.org/manual/5.2/

笔者如有机会,会另开博文详细介绍nginx的lua模块的详细用法;

本文固定链接: http://www.xiaoxiaoliang.com/?p=210 | 小小亮

该日志由 xiaoxiaoliang 于2013年12月05日发表在 web服务器, 未分类 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: Nginx使用lua执行linux脚本文件 | 小小亮
关键字:

Nginx使用lua执行linux脚本文件:等您坐沙发呢!

发表评论

您必须 [ 登录 ] 才能发表留言!