MoonScript版的ngx.timer
实际如果是直接调用ngx.timer的API,moonscript和lua的ngx.timer的函数写法差别不是很大。
candylab.moon
handler = (fill, params)->
ok, err = ngx.timer.at(1, handler, "params-data")
ngx.log(ngx.DEBUG, "ok:", ok, " err:", err)
ok, err = ngx.timer.at(6, handler, "params-data")
if not ok then
ngx.log(ngx.ERR, "err:", err)
candylab.lua
local http = require("lapis.nginx.http")
local handler
handler = function(fill, params)
local ok, err = ngx.timer.at(1, handler, "params-data")
return ng ...
各种资源下载
esxi的下载
ttps://my.vmware.com/web/vmware/evalcenter?p=free-esxi6
esxi配置
http://wiki.intra.sina.com.cn/pages/viewpage.action?pageId=9620049
java程序权控制
http://java.com/zh_CN/download/help/win_controlpanel.xml
r710 远程管理卡管理系统
http://www.shaoqun.com/a/96282.aspx
DellDRAC,虚构介质分离或所选虚拟磁盘驱动器的虚拟介质重定向已由另一用户使用
http://www.makaidong.com/行业应用/440495.shtml
Mysql下载地址
https://downloads.mariadb.com/archive/index/p/mysql/v/5.5.28
wget https://downloads.mariadb.com/archives/mysql-5.5/MySQL-devel-5.5.28-1.el6.x86_64.rp ...
Openresty定时器ngx.timer通过Redis的pubsub进行通信
做一个小实验:
先打开一个redis-cli, 监听所有事件:
127.0.0.1:6379> config set notify-keyspace-events KEA
127.0.0.1:6379> psubscribe __key*@0__:*
再开一个redis-cli,进行publish与subscribe操作:
127.0.0.1:6379> publish chatroom "123"
127.0.0.1:6379> publish chatroom "abc"
然于,打开一个python redis client进行subscribe:
r = redis.StrictRedis(host='localhost', port=6379, db=0, password='candylab.net')
ps = rc.pubsub()
ps.subscribe('chatroom')
for ...
从实现角度看Openresty + LUA = WAF
作者:糖果
1.WAF存在形态
WAF就是WEB防火墙,Nginx Lua和Openresty的出现,让基于LUA开发的WAF更有可能。对所有
会造成安全威胁的HTTP请求数据,都应该成为安全检查策略应该关注的内容,笼统上来讲OR
WAF的式样要求的输入数据,就是可以在WEB服务器端见到的所有的HTTP数据,而这些数据对
OpenResty这种WEB服务器来讲,几乎都是可见的。
常见的WEB开发是不能关注所有的安全式样,比如XSS、SQL注入、CC等所有的这些涉及安全的
功能需求,并且这些需求随着外部安全气象发生变化的,需要不断的更新策略,这些是安全
共通业务而不是产品业务。
基于大日志数据分析的WEB安全分析模块,是一种接近实时拦截,而不是准实时的安全防火墙
机制。常见的OR(OpenResty)更多的是针对正则的实时拦截策略。基于LOG日志分析是一种异
步的处理机制实时读取日志,不会直接对产品业务线的性能有太多的干扰,而基于OR(OpenResty)
LUA WAF大多数时是以代理的形式,串行的部署在正常的WEB业务前进行拦截的,是影响业务
响应时间的,在应急事件响应中与日常安全 ...
MoonScript与Redis客户端
所谓的Redis LUA客户端有两种版本,一种就是本地可运行版本,还有一个版本是OpenResty的版本,下面介绍的这段Moonscript段代码是本地版的。
作者:糖果
candylab.moon
redis = require "redis"
client = redis.connect '127.0.0.1', 6379
auth_flg = client\auth "www.moonscript.cn"
if not auth_flg
print("Auth NG!!!")
client\publish "chatroom", "www.candylab.net"
candylab.lua
local redis = require("redis")
local client = redis.connect('127.0.0.1', 6379)
local auth_flg = client:auth("www.moonscript.cn")
if not auth_flg then
print("Auth NG!!!")
end
return client ...
用RESTY-HTTP实现Graylog的Widget更新与查询
作者:糖果
MoonScript for GrayLog是之前写的一个基于Lapis与Simple HTTP的Graylog日志查询SDK,
支持Stream查询,最近为了做自动化分析,加入了新的接口中调用功能,加入了对Dashboard
widgets和更新与查询,通过这个程序,实现一些反扫逻辑。
@putRequest:(req_url, data) =>
http = require "resty.http"
httpc = http.new()
metadata = {
method:"PUT",
body: data,
headers: self.headers_info
}
res, err = httpc\request_uri(req_url, metadata)
if not res
ngx.say("fa ...
Lapis框架的常用处理方法
作者:糖果
在Lapis中处理GET、POST、PUT。
import respond_to from require "lapis.application"
class App extends lapis.Application
@enable "etlua"
"/login": respond_to {
GET: =>
return "login get"
POST: =>
return "login post"
PUT: =>
return "login put"
}
GET、POST、PUT的使用一目了然。
在另一个路由中,调用GraylogSDK访问自己的/login方法,用PUT方法。
headers_info = {
'Authorization': auth,
'Accept': '*/*',
'Content-Type':'application/json'
}
class RestyGraylog
@putReq ...
Lapis框架的基本库模板
作者:糖果
MoonScript库模板代码:
local *
configs = {}
config = (env, fn) ->
print(env, fn)
return 1
setmetatable {
:config
}, {
__call:(...) => config ...
Lua库模板代码:
local configs, config
configs = { }
config = function(env, fn)
return 1
end
return setmetatable({
config = config
}, {
__call = function(self, ...)
return config(...)
end
})
MoonScript如何引用库
config = require "lib"
print(type(config))
for k,v in pairs(confi ...
MoonScript实现Map按值排序
作者:糖果
MoonScript代码:
board = {
['0.0.0.1']:1,
['0.0.0.5']:5,
['0.0.0.3']:3,
['0.0.0.2']:2,
['0.0.0.9']:9,
['0.0.3.3']:3,
['0.0.0.6']:6
}
mapsort = (board)->
b_len = 0
for k,v in pairs(board)
b_len = b_len + 1
a1 = {}
a2 = {}
i = 0
for k,v in pairs(board)
i = i + 1
a1[i] = k
a2[i] = v
for i = 1, b_len
max = a2[i]
for j = i + 1, b_len
if a2[j] > max
tmp = a2[j]
a2[j] = max
...
Lua 5.1 リファレンスマニュアル
以下是引用原文:
程序员改Bug的时候
Lua Lua 5.1 リファレンスマニュアル
Copyright © 2006 Lua.org, PUC-Rio. All rights reserved.
目次
索引
Top
0 - 日本語訳について
1 - 概要
2 - 言語
2.1 - 字句の構成
2.2 - 値と型
2.2.1 - 変換
2.3 - 変数
2.4 - 文
2.4.1 - チャンク
2.4.2 - ブロック
2.4.3 - 代入
2.4.4 - 制御構造
2.4.5 - for文
2.4.6 - 文としての関数呼び出し
2.4.7 - ローカル宣言
2.5 - 式
2.5.1 - 算術演算子
2.5.2 - 関係演算子
2.5.3 - 論理演算子
2.5.4 - 連結
2.5.5 - 長さ演算子
2.5.6 - 優先順位
2.5.7 - テーブルコンストラクタ
2.5.8 - 関数呼び出し
2.5.9 - 関数定義
2.6 - 可視ルール
2.7 - エラー処理
2.8 - メタテーブル
2.9 - 環境
2.10 - ガベージコレクション
2.10.1 - ...