-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathlua.conf
324 lines (275 loc) · 10.8 KB
/
lua.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
#lua.conf
server {
listen 80;
server_name openresty;
#注意一定在生产环境开启lua_code_cache,否则每个请求都会创建Lua VM实例。
lua_code_cache off;
#lua-resty-template配置
#first match ngx location
#set $template_location "/templates";
#then match root read file
set $template_root "/opt/openresty/openresty-example/templates";
#Lua templates 测试
#location /templates {
# internal;
# alias /opt/openresty/openresty-example/templates2;
#}
#Hello World
location /hello {
default_type 'text/html';
content_by_lua_file /opt/openresty/openresty-example/lua/hello.lua;
}
#读取请求的头,body参数等信息以及设置nginx变量和修改nginx变量
location ~ /lua_request/(\d+)/(\d+) {
#设置nginx变量
set $a $1;
set $b $host;
default_type "text/html";
#nginx内容处理
content_by_lua_file /opt/openresty/openresty-example/lua/test_1_request.lua;
#内容体处理完成后调用
echo_after_body "ngx.var.b $b";
}
#返回请求头信息,输出内容体
location /lua_response_1 {
default_type "text/html";
content_by_lua_file /opt/openresty/openresty-example/lua/test_1_response.lua;
}
#跳转
location /lua_response_2 {
default_type "text/html";
content_by_lua_file /opt/openresty/openresty-example/lua/test_2_response.lua;
}
#其他API,URL编码和解码,参数编码和解码,MD5,Base64等加密
location /lua_other {
default_type "text/html";
content_by_lua_file /opt/openresty/openresty-example/lua/test_3_other.lua;
}
#Nginx全局内存
#首先在nginx.conf的http部分分配内存大小
#lua_shared_dict shared_data 1m;
location /lua_shared_dict {
default_type "text/html";
content_by_lua_file /opt/openresty/openresty-example/lua/test_4_lua_shared_dict.lua;
}
#测试lua_init的功能
#需要额外的在nginx http模块配置
#init_by_lua_file /opt/openresty/openresty-example/lua/test_5_init.lua;
location /lua_init {
#因为开启了lua_code_cache off,所以此全局和局部变量会一直没变化,可以查实关闭此参数
lua_code_cache on;
default_type "text/html";
content_by_lua_file /opt/openresty/openresty-example/lua/test_5_init_response.lua;
}
#set_by_lua的功能测试
#访问如http://127.0.0.1/lua_set_1?i=1&j=10进行测试。 如果我们用纯set指令是无法实现的。
location /lua_set_1 {
default_type "text/html";
set_by_lua_file $num /opt/openresty/openresty-example/lua/test_7_set_by_lua.lua;
echo $num;
}
#再举个实际例子,我们实际工作时经常涉及到网站改版,有时候需要新老并存,或者切一部分流量到新版
#可以是用nginx的map指令来映射host到指定nginx变量,方便我们测试
#map指定配置段在http中
#请参考nginx.conf中的map配置
#但是我们想把商品编号为为8位(比如品类为图书的)没有改版完成,需要按照相应规则跳转到老版,但是其他的到新版;虽然使用if指令能实现,但是比较麻烦,基本需要这样
#
location /lua_set_2 {
default_type "text/html";
#如绑定hosts
#192.168.20.31 item.jd.com;
#192.168.20.31 item2014.jd.com;
#简单配置
#if ($item_dynamic = "1") {
# rewrite ^/(.*) http://www.baidu.com redirect;#old
#}
#rewrite ^/(.*) http://www.jd.com redirect;#new
#复杂的if配置
set $jump "0";
if ($item_dynamic = "1") {
set $jump "1";
}
if ($uri ~ "/lua_set_2/6[0-9]{7}") {
set $jump "${jump}2";
}
#非强制访问新版,且访问指定范围的商品
#http://item.jd.com/lua_set_2/11010100
if ($jump = "02") {
rewrite ^/(.*) http://www.baidu.com redirect;#old
}
#http://item.jd.com/lua_set_2/010101
rewrite ^/(.*) http://www.jd.com redirect;#new
#以上规则还是比较简单的,如果涉及到更复杂的多重if/else或嵌套if/else实现起来就更痛苦了,可能需要到后端去做了;此时我们就可以借助lua了:
}
#set_by_lua的功能测试3
location /lua_set_3 {
default_type "text/html";
if ($uri ~ "^/lua_set_3/([0-9]+)") {
set $skuId $1;
}
#访问 http://item.jd.com/lua_set_3/111111 到 京东首页
#访问 http://item.jd.com/lua_set_3/88888888 到 自营图书
#访问 http://item.jd.com/lua_set_3/999999999 到 自营音响
set_by_lua_file $to_book /opt/openresty/openresty-example/lua/test_7_set_by_lua_3_1.lua;
set_by_lua_file $to_mvd /opt/openresty/openresty-example/lua/test_7_set_by_lua_3_2.lua;
#自营图书
if ($to_book) {
rewrite ^/(.*) https://book.jd.com redirect;
}
#自营音像
if ($to_mvd) {
rewrite ^/(.*) https://mvd.jd.com redirect;
}
#默认
rewrite ^/(.*) http://www.jd.com redirect;
}
#rewrite_by_lua 功能测试1
location /lua_rewrite_1 {
default_type "text/html";
rewrite_by_lua_file /opt/openresty/openresty-example/lua/test_8_rewrite_by_lua.lua;
echo "no rewrite";
}
#rewrite_by_lua 功能测试2
location /lua_rewrite_2 {
default_type "text/html";
rewrite_by_lua_file /opt/openresty/openresty-example/lua/test_8_rewrite_by_lua_2.lua;
echo "rewrite2 uri : $uri, a : $arg_a,b : $arg_b";
}
#rewrite_by_lua 功能测试3
location /lua_rewrite_3 {
default_type "text/html";
rewrite_by_lua_file /opt/openresty/openresty-example/lua/test_8_rewrite_by_lua_3.lua;
echo "rewrite3 uri : $uri";
}
#/access_by_lua 功能测试
location /lua_access {
default_type "text/html";
access_by_lua_file /opt/openresty/openresty-example/lua/test_9_access.lua;
echo "access";
}
#Lua模块测试
location /module_test {
default_type "text/html";
lua_code_cache on;
content_by_lua_file /opt/openresty/openresty-example/lua/test_10_module.lua;
}
#Lua Redis模块测试
location /lua_redis_test {
default_type "text/html";
content_by_lua_file /opt/openresty/openresty-example/lua/test_11_redis.lua;
}
#Lua Redis Pipeline测试
location /lua_redis_pipeline_test {
default_type "text/html";
content_by_lua_file /opt/openresty/openresty-example/lua/test_12_redis.lua;
}
#Lua Redis Eval测试
location /lua_redis_eval_test {
default_type "text/html";
content_by_lua_file /opt/openresty/openresty-example/lua/test_13_redis.lua;
}
#Lua Redis SHAEval测试
location /lua_redis_shaeval_test {
default_type "text/html";
content_by_lua_file /opt/openresty/openresty-example/lua/test_14_redis.lua;
}
#Lua Mysql 测试
location /lua_mysql_test {
default_type "text/html";
content_by_lua_file /opt/openresty/openresty-example/lua/test_15_mysql.lua;
}
#Lua Mysql loadfile测试
location /lua_mysql_test2 {
default_type "text/html";
content_by_lua_file /opt/openresty/openresty-example/lua/test_16_mysql.lua;
}
#Lua Http 客户端测试
location /lua_http_test1 {
default_type "text/html";
content_by_lua_file /opt/openresty/openresty-example/lua/test_17_http.lua;
}
#Lua ngx.location.capture 测试Http请求
location ~ /proxy/(.*) {
#default_type "text/html";
#internal表示只能内部访问,即外部无法通过url访问进来; 并通过proxy_pass将请求转发到upstream。
#此用例有毒,好像跟本无法正常访问,反正知道有这么回事就行了。
internal;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://dddd/$1$is_args$args;
}
#Lua ngx.location.capture 测试
#访问如http://192.168.1.2/lua_http_2进行测试可以看到淘宝搜索界面。
location /lua_http_test2 {
default_type 'text/html';
content_by_lua_file /opt/openresty/openresty-example/lua/test_18_capture.lua;
}
#Lua json测试
location ~ /lua_cjson_test {
default_type 'text/html';
content_by_lua_file /opt/openresty/openresty-example/lua/test_19_json.lua;
}
#Lua dkjson测试
location /lua_dkjson_test {
default_type 'text/html';
content_by_lua_file /opt/openresty/openresty-example/lua/test_20_dkjson.lua;
}
#Lua iconv 字符编解码测试
location /lua_iconv_test {
default_type 'text/html';
charset gbk;
content_by_lua_file /opt/openresty/openresty-example/lua/test_21_luarocks.lua;
}
#Lua bit 操作测试
location /lua_bit_test {
default_type 'text/html';
content_by_lua_file /opt/openresty/openresty-example/lua/test_22_bit.lua;
}
#Lua LurCache 测试,只能每个work进程内共享
location /lua_lrucache_test {
default_type 'text/html';
lua_code_cache on;
content_by_lua_file /opt/openresty/openresty-example/lua/test_23_cache.lua;
}
#Lua utf8.so 字符串操作包
location /lua_utf8_test {
default_type 'text/html';
content_by_lua_file /opt/openresty/openresty-example/lua/test_24_string.lua;
}
#Lua gbk转unicode
location /lua_utf8_to_unicode_test {
default_type 'text/html';
content_by_lua_file /opt/openresty/openresty-example/lua/test_25_string_unicode.lua;
}
#Lua 字符串trim
location /lua_string_trim_test {
default_type 'text/html';
content_by_lua_file /opt/openresty/openresty-example/lua/test_26_string_trim.lua;
}
#Lua 字符串split
location /lua_string_split_test {
default_type 'text/html';
content_by_lua_file /opt/openresty/openresty-example/lua/test_27_string_split.lua;
}
#Lua 模版首次测试
location /lua_template_1 {
default_type 'text/html';
content_by_lua_file /opt/openresty/openresty-example/lua/test_28_lua_template.lua;
}
#Lua 模版测试2
location /lua_template_2 {
default_type 'text/html';
content_by_lua_file /opt/openresty/openresty-example/lua/test_29_lua_template.lua;
}
#Lua 模版测试3API试验
location /lua_template_3 {
default_type 'text/html';
content_by_lua_file /opt/openresty/openresty-example/lua/test_30_lua_template_api_lua.lua;
}
#Lua 实战案例1
location ~ ^/lua_action_class_1/(\d+)$ {
default_type 'text/html';
set $adid $1;
content_by_lua_file /opt/openresty/openresty-example/action/action_class_1.lua;
}
}