├── .gitignore
├── README.md
├── assets
├── base64-filter-by-lua.png
├── base64-nginx-module.png
├── checkups-with-nginxconf.png
├── graffle
│ ├── base64-filter-by-lua.graffle
│ ├── checkups-with-nginxconf.graffle
│ │ ├── data.plist
│ │ ├── image1.tiff
│ │ └── image3.png
│ ├── how-ngxlua-works.graffle
│ ├── metadata-shcache.graffle
│ ├── nginx-architecture.graffle
│ │ ├── data.plist
│ │ ├── image11.png
│ │ ├── image12.png
│ │ ├── image13.png
│ │ ├── image8.png
│ │ └── image9.png
│ ├── nginx-http-request.graffle
│ ├── nginx-upstream.graffle
│ │ ├── data.plist
│ │ └── image1.png
│ ├── shanks-redis.graffle
│ ├── shanks-upstream-state.graffle
│ │ ├── data.plist
│ │ ├── image1.png
│ │ └── image2.png
│ ├── upyun-api-new.graffle
│ ├── upyun-api-old.graffle
│ ├── upyun-cdn-architecture.graffle
│ ├── upyun-with-ngxlua.graffle
│ └── vivi-streaming-upload.graffle
├── how-ngxlua-works.png
├── lua-resty-checkups.png
├── metadata-shcache.png
├── nginx-architecture.png
├── nginx-http-request.png
├── nginx-upstream.png
├── shanks-redis.png
├── shanks-upstream-state.png
├── upyun-api-new.png
├── upyun-api-old.png
├── upyun-cdn-architecture.png
├── upyun-with-ngxlua.png
└── vivi-streaming-upload.png
├── using-ngxlua-in-upyun-2-wide.key
├── using-ngxlua-in-upyun-2-wide.pdf
├── using-ngxlua-in-upyun-2.key
├── using-ngxlua-in-upyun-2.pdf
├── using-ngxlua-in-upyun.key
├── using-ngxlua-in-upyun.pdf
└── work
└── conf
└── nginx.conf
/.gitignore:
--------------------------------------------------------------------------------
1 | work/*
2 |
3 | !work/conf
4 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Using ngx_lua in UPYUN
2 |
3 | * 2014.11 @ Beijing OSC: `Using ngx_lua in UPYUN` ( [slideshare](http://www.slideshare.net/timebug/using-ngxlua-in-upyun) | [speakerdeck](https://speakerdeck.com/timebug/using-ngx-lua-in-upyun) )
4 | * 2015.11 @ Beijing OpenResty Con: `Using ngx_lua in UPYUN 2` ( [slideshare](http://www.slideshare.net/timebug/using-ngxlua-in-upyun-2) | [speakerdeck](https://speakerdeck.com/timebug/using-ngx-lua-in-upyun-2) )
5 | * blog:
6 |
7 | ## Run the Code
8 |
9 | 1) Building and Installing [Openresty](http://openresty.org/)
10 |
11 | ```
12 | tar xzvf ngx_openresty-VERSION.tar.gz
13 | cd ngx_openresty-VERSION/
14 | ./configure
15 | make
16 | make install
17 | ```
18 |
19 | 2) Start the Nginx Server
20 |
21 | ```
22 | cd work
23 | mkdir logs
24 |
25 | export PATH=/usr/local/openresty/nginx/sbin:$PATH
26 | nginx -p `pwd`/ -c conf/nginx.conf
27 | ```
28 |
29 | 3) Hello World
30 |
31 | ```
32 | curl http://localhost:8080/hello
33 | ```
34 |
35 | ## See Also
36 |
37 | *
38 | *
39 | *
40 | *
41 | *
42 | *
43 | *
44 | *
45 | *
46 | *
47 | *
48 |
--------------------------------------------------------------------------------
/assets/base64-filter-by-lua.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/base64-filter-by-lua.png
--------------------------------------------------------------------------------
/assets/base64-nginx-module.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/base64-nginx-module.png
--------------------------------------------------------------------------------
/assets/checkups-with-nginxconf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/checkups-with-nginxconf.png
--------------------------------------------------------------------------------
/assets/graffle/base64-filter-by-lua.graffle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/graffle/base64-filter-by-lua.graffle
--------------------------------------------------------------------------------
/assets/graffle/checkups-with-nginxconf.graffle/data.plist:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/graffle/checkups-with-nginxconf.graffle/data.plist
--------------------------------------------------------------------------------
/assets/graffle/checkups-with-nginxconf.graffle/image1.tiff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/graffle/checkups-with-nginxconf.graffle/image1.tiff
--------------------------------------------------------------------------------
/assets/graffle/checkups-with-nginxconf.graffle/image3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/graffle/checkups-with-nginxconf.graffle/image3.png
--------------------------------------------------------------------------------
/assets/graffle/how-ngxlua-works.graffle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/graffle/how-ngxlua-works.graffle
--------------------------------------------------------------------------------
/assets/graffle/metadata-shcache.graffle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/graffle/metadata-shcache.graffle
--------------------------------------------------------------------------------
/assets/graffle/nginx-architecture.graffle/data.plist:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/graffle/nginx-architecture.graffle/data.plist
--------------------------------------------------------------------------------
/assets/graffle/nginx-architecture.graffle/image11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/graffle/nginx-architecture.graffle/image11.png
--------------------------------------------------------------------------------
/assets/graffle/nginx-architecture.graffle/image12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/graffle/nginx-architecture.graffle/image12.png
--------------------------------------------------------------------------------
/assets/graffle/nginx-architecture.graffle/image13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/graffle/nginx-architecture.graffle/image13.png
--------------------------------------------------------------------------------
/assets/graffle/nginx-architecture.graffle/image8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/graffle/nginx-architecture.graffle/image8.png
--------------------------------------------------------------------------------
/assets/graffle/nginx-architecture.graffle/image9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/graffle/nginx-architecture.graffle/image9.png
--------------------------------------------------------------------------------
/assets/graffle/nginx-http-request.graffle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/graffle/nginx-http-request.graffle
--------------------------------------------------------------------------------
/assets/graffle/nginx-upstream.graffle/data.plist:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/graffle/nginx-upstream.graffle/data.plist
--------------------------------------------------------------------------------
/assets/graffle/nginx-upstream.graffle/image1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/graffle/nginx-upstream.graffle/image1.png
--------------------------------------------------------------------------------
/assets/graffle/shanks-redis.graffle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/graffle/shanks-redis.graffle
--------------------------------------------------------------------------------
/assets/graffle/shanks-upstream-state.graffle/data.plist:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/graffle/shanks-upstream-state.graffle/data.plist
--------------------------------------------------------------------------------
/assets/graffle/shanks-upstream-state.graffle/image1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/graffle/shanks-upstream-state.graffle/image1.png
--------------------------------------------------------------------------------
/assets/graffle/shanks-upstream-state.graffle/image2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/graffle/shanks-upstream-state.graffle/image2.png
--------------------------------------------------------------------------------
/assets/graffle/upyun-api-new.graffle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/graffle/upyun-api-new.graffle
--------------------------------------------------------------------------------
/assets/graffle/upyun-api-old.graffle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/graffle/upyun-api-old.graffle
--------------------------------------------------------------------------------
/assets/graffle/upyun-cdn-architecture.graffle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/graffle/upyun-cdn-architecture.graffle
--------------------------------------------------------------------------------
/assets/graffle/upyun-with-ngxlua.graffle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/graffle/upyun-with-ngxlua.graffle
--------------------------------------------------------------------------------
/assets/graffle/vivi-streaming-upload.graffle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/graffle/vivi-streaming-upload.graffle
--------------------------------------------------------------------------------
/assets/how-ngxlua-works.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/how-ngxlua-works.png
--------------------------------------------------------------------------------
/assets/lua-resty-checkups.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/lua-resty-checkups.png
--------------------------------------------------------------------------------
/assets/metadata-shcache.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/metadata-shcache.png
--------------------------------------------------------------------------------
/assets/nginx-architecture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/nginx-architecture.png
--------------------------------------------------------------------------------
/assets/nginx-http-request.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/nginx-http-request.png
--------------------------------------------------------------------------------
/assets/nginx-upstream.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/nginx-upstream.png
--------------------------------------------------------------------------------
/assets/shanks-redis.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/shanks-redis.png
--------------------------------------------------------------------------------
/assets/shanks-upstream-state.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/shanks-upstream-state.png
--------------------------------------------------------------------------------
/assets/upyun-api-new.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/upyun-api-new.png
--------------------------------------------------------------------------------
/assets/upyun-api-old.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/upyun-api-old.png
--------------------------------------------------------------------------------
/assets/upyun-cdn-architecture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/upyun-cdn-architecture.png
--------------------------------------------------------------------------------
/assets/upyun-with-ngxlua.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/upyun-with-ngxlua.png
--------------------------------------------------------------------------------
/assets/vivi-streaming-upload.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/assets/vivi-streaming-upload.png
--------------------------------------------------------------------------------
/using-ngxlua-in-upyun-2-wide.key:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/using-ngxlua-in-upyun-2-wide.key
--------------------------------------------------------------------------------
/using-ngxlua-in-upyun-2-wide.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/using-ngxlua-in-upyun-2-wide.pdf
--------------------------------------------------------------------------------
/using-ngxlua-in-upyun-2.key:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/using-ngxlua-in-upyun-2.key
--------------------------------------------------------------------------------
/using-ngxlua-in-upyun-2.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/using-ngxlua-in-upyun-2.pdf
--------------------------------------------------------------------------------
/using-ngxlua-in-upyun.key:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/using-ngxlua-in-upyun.key
--------------------------------------------------------------------------------
/using-ngxlua-in-upyun.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timebug/using-ngxlua-in-upyun/fc3dc38abc1507923b9e97d236b373f7e366a049/using-ngxlua-in-upyun.pdf
--------------------------------------------------------------------------------
/work/conf/nginx.conf:
--------------------------------------------------------------------------------
1 | # -*- mode: nginx -*-
2 | # vim: set expandtab tabstop=4 shiftwidth=4:
3 |
4 | worker_processes 1;
5 | error_log logs/error.log;
6 |
7 | events {
8 | worker_connections 1024;
9 | }
10 |
11 | http {
12 | server {
13 | listen 8080;
14 |
15 | # Hello World
16 | location /hello {
17 | set $foo "hello";
18 | echo $foo;
19 |
20 | set $foo "world";
21 | echo $foo;
22 | }
23 |
24 | # If is Evil
25 | location /if {
26 | set $foo 1;
27 |
28 | if ($foo = 1) {
29 | set $foo 2;
30 | echo "foo = $foo";
31 | }
32 |
33 | set $foo 3;
34 | proxy_pass http://127.0.0.1:$server_port/$foo;
35 | }
36 |
37 | location ~ /(\d+) {
38 | echo "bar = $1";
39 | }
40 |
41 | # Intro ngx_lua
42 | location /add {
43 | set $res '';
44 |
45 | rewrite_by_lua '
46 | local a = tonumber(ngx.var.arg_a) or 0
47 | local b = tonumber(ngx.var.arg_b) or 0
48 | ngx.var.res = a + b
49 | ';
50 |
51 | content_by_lua '
52 | ngx.say(ngx.var.res)
53 | ';
54 | }
55 |
56 | # Base64 Filter by Lua
57 | location /base64 {
58 | set $b64_en '';
59 | set $b64_e0 '';
60 | set $b64_e1 '';
61 |
62 | echo_duplicate 1000 hello;
63 |
64 | header_filter_by_lua '
65 | ngx.header.content_length = nil -- ((n + 2) / 3 ) * 4
66 | ngx.header.content_type = "text/plain"
67 | ngx.header.content_transfer_encoding = "base64"
68 | ';
69 |
70 | body_filter_by_lua '
71 | local chunk = ngx.arg[1]
72 |
73 | local e0 = ngx.var.b64_e0 or ""
74 | local e1 = ngx.var.b64_e1 or ""
75 | local en = tonumber(ngx.var.b64_en) or 0
76 |
77 | if en == 1 then
78 | chunk = e0 .. chunk
79 | elseif en == 2 then
80 | chunk = e0 .. e1 .. chunk
81 | end
82 |
83 | if not ngx.arg[2] then
84 | en = #chunk % 3
85 | if en == 1 then
86 | e0 = chunk:sub(-1)
87 | elseif en == 2 then
88 | e1 = chunk:sub(-1)
89 | e0 = chunk:sub(-2, -2)
90 | end
91 | chunk = chunk:sub(1, #chunk - en)
92 | else -- eof
93 | en = 0
94 | end
95 |
96 | ngx.var.b64_en = en
97 | ngx.var.b64_e0 = e0
98 | ngx.var.b64_e1 = e1
99 |
100 | ngx.arg[1] = ngx.encode_base64(chunk)
101 | ';
102 | }
103 | }
104 | }
105 |
--------------------------------------------------------------------------------