Nginx使用lua执行linux脚本文件
Dec052013
通常情况下;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模块的详细用法;