Windows版本的Openresty文件下载
openresty for windows32位
openresty for windows64位
Nginx用户权限(文件读写时候应该注意到的问题)
Nginx用户权限
Nginx用户权限
有时候当Nginx读取本地目录时会收到403错误,权限问题。
先来了解一下Nginx的用户管理,Nginx在以Linux service脚本启动时,通过start-stop-domain启动,会以root权限运行daemon进程。
然后daemon进程读取/etc/nginx/nginx.conf文件中的user配置选项,默认这里的user=nginx
也就是用nginx用户启动worker process。403错误就是因为nginx用户没有权限访问我当前开发用的用户目录,/home/dean/work/resources。
解决方法是将user=nginx替换成root,然后重新启动nginx,可以了。
其他方法也试过,比如给/home/dean/work/resources目录设置777权限,比如将nginx用户加入root组,都不行。
所以当开发的时候,就用user=root配置吧。至于产品环境下,resouces目录完全可以放到nginx用户目录下,所以问题不大。
感谢作者分享:
http://www.2cto.com/os/20130 ...
Python FAQ
Python FAQ
Flask 教程,第二部分:模板
Python多分隔符号拆分字符串
Lua功能模块之“加密”
作者:糖果
在Lua开发的世界中,有很多开源的模块,分布在一些网站(比如开普勒项目),github上,有的都已经配置好了,可以向python的pip工具一样,只不过在lua世界中使用luarocks安装工具快速的安装。
我们在开发的工作中,难免要对一些数据进行加密处理,而加密模块的使用有是就必不可少。
在lua官方的WIKI列表中就列出了,很多lua程序写的加密库,这写加密库有的是用纯lua写的,也有用lua调用C的程序实现加密。不过有些时候甄选这些库还是需要花一些时间精力,只是需要测试一下这是加密算是否是好用的
这是lua组织列出的一览列表。
http://lua-users.org/wiki/CryptographyStuff
说一下为什么要加密,我们面临的任务是什么!我们现在面临的任务是,要对一段字符串进行sha256算法加密。
我们从列表中选出了几个支持sha256加密的包,并说明一下这几个工具包。
1.SecureHashAlgorithm和SecureHashAlgorithmBW
这个工具包是支持sha256加密的,而且是纯lua方法的实现,问题是,这两个包分别依赖lu ...
Lua Lapis的模板系统etlua
作者:糖果
主流的WEB开发框架都有模板系统,或是支持第三方的模板插件。Lua Lapis也不例外,也有自己的模板系统,叫做etlua。
说到模板系统,另外要提一下静态资源的问题,模板的话难免要使用css、js、image这种静态文件,为了扫除一部分障碍先说一下Openresty是如何设定静态目标的。(相对Django相对要简单很多。)
location /static/ {
alias static/; ...
Python多分隔符号拆分字符串
如下代码,实现python多个分隔符拆分字符串。
def tsplit(string, delimiters):
"""Behaves str.split but supports multiple delimiters."""
delimiters = tuple(delimiters)
stack = [string,]
for delimiter in delimiters:
for i, substring in enumerate(stack):
substack = substring.split(delimiter)
stack.pop(i)
for j, _substring in enumerate(substack):
stack.insert(i+j, _substring)
return stack
很多时候我们需要用多个分隔符拆分字符串,例如拆分标签时,既要用中文的分号,也要用到英文的分号。
如下 ...
Windows下LUA配置环境变量(LDT)
下面举个例子,在LDT下,如保设定环境变量,让IDE知道Lua安装的位置。
LUA_CPATH=/usr/lib64/lua/5.1/?.so;?.so;/home/merge/1209/Core/lua_client/?.so;?.so;/usr/local/lib/lua/5.1/?.so;?.so
LUA_PATH=/usr/share/lua/5.1/?.lua;?.lua;/home/merge/1209/Core/lua_client/?.lua;*.lua;/usr/local/share/lua/5.1/?.lua;*.lua;
Lua的转义符号“%”
作者:糖果
Lua有些符号在用户字符替换的时候,可能会发生转义。
今天群里的一位小伙伴,就需要到类似的问题,比如说要将字符串中的’(‘变成’['。
解答问题的伙伴给出如下代码:
a = '123.(456)'
c = string.gsub(a, '%(', '[')
print(c)
输出的结果是:
123.[456)
ngx.re.gsub是如何使用转义的,下面给一个实际的正则的例子:
sleep\((\s*)(\d*)(\s*)\)
主要是"%"符号,起到了告诉系统转义的用途。
LUA与STOMP协议
作者:糖果
STOMP协议是一种简单的消息文本协议。协义本身简单明了,用消息头定义和消息体数据传输。
RabbitMQ做为一种队列中间件,提供了STOMP协议的支持,我们可以通过STOMP协议向队列发送消息。下面的例子中,我们将使用LUA程序向RabbitMQ发送消息, 通过Python程序读取消息。
send.lua文件
local client = require "stomp"
local mq, err = client:new()
local ok, err = mq:connect("127.0.0.1", 61613)
local msg = "say hi!"
local headers = {}
headers["destination"] = "/queue/test"
headers["app-id"] = "APP"
local ok, err = mq:send(info_json, headers)
对上面的代码说明一下:
连接时候RabbitMQ的IP是本机的127.0.0.1, STOMP协议的服务的端口是默认的61613。
在hea ...
Lua中ipair和pair关键字的区别是什么?
ipair是从key=1,开始累加,遇到val是nil就结束循环。
pair输出的结果和table定义的顺序是一致的(非数组不保证与声明的顺序一致)。
pairs()可以遍历整个table,即包括数组及非数组部分。
ipairs()函数用于遍历table中的数组部分。
i= integer ,integer key
1:使用ipair循环
local tt =
{
[1] = "test3",
[4] = "test4",
[5] = "test5"
}
for i,v in ipairs(tt) do
print( tt[i] )
end
运行结果:
test3
2:使用pair循环
local tt =
{
[1] = "test3",
[4] = "test4",
[5] = "test5"
}
for i,v in pairs(tt) do
print( tt[i] )
end
运行结果: ...


