forked from vkholodkov/nginx-eval-module
-
Notifications
You must be signed in to change notification settings - Fork 23
/
README
108 lines (83 loc) · 3.22 KB
/
README
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
Synopsis
# an example for working with the ngx_drizzle + ngx_rds_json
# modules, but you must put ngx_rds_json *after*
# ngx_eval during nginx configure, for example:
# ./configure --add-module=/path/to/nginx-eval-module \
# --add-module=/path/to/rds-json-nginx-module \
# --add-module=/path/to/drizzle-nginx-module
location = /mysql {
eval_subrequest_in_memory off;
eval_override_content_type text/plain;
eval_buffer_size 4k; # default 4k, truncated if overflown
eval $res {
drizzle_query "select * from cats";
drizzle_pass my_mysql_backend;
rds_json_on;
}
# now $res holds the JSON formatted result set
if ($res ~ '"Tom"') {
echo "Found the Tom cat!";
break;
}
echo "The Tom cat is missing!";
}
# an example for working with the ngx_postgres module
location = /login {
eval_subrequest_in_memory off;
eval_override_content_type text/plain;
eval_buffer_size 1k;
eval $uid {
postgres_query "select id
from users
where name=$arg_name and pass=$arg_pass";
postgres_pass pg_backend;
postgres_output value 0 0;
}
if ($uid !~ '^\d+$') {
rewrite ^ /relogin redirect; break;
}
# your content handler settings...
}
Description
This fork of ngx_eval can work with any content handlers and
even with filters enabled as long as you put ngx_eval *before*
your filter modules during nginx configure, for instance
./configure --prefix=/opt/nginx \
--add-module=/path/to/this/nginx-eval-module \
--add-module=/path/to/your/filter/module \
--add-module=/path/to/your/other/filters
such that ngx_eval's filter works *after* your filter modules.
Limitations
* The contents of subrequests issued from the eval block won't be
captured properly.
Compatibility
The following versions of Nginx should work with this module:
* 0.8.0 ~ 0.8.41 (0.8.42+ requires patching, see below)
* 0.7.x >= 0.7.21 (last tested version is 0.7.66)
Note that nginx 0.8.42+ won't work due to a famous regression appeared
since 0.8.42: <http://forum.nginx.org/read.php?29,103078,103078 >,
but fortunately a patch is available for nginx 0.8.53:
http://agentzh.org/misc/nginx/nginx-0.8.53-rewrite_phase_fix.patch
This one-line patch should also be able to apply cleanly to other versions
of nginx 0.8.42+.
Nowadays we prefer ngx_lua to do the tasks originally done by ngx_eval
because of various inherent limitations in ngx_eval (and yeah, it also
requires patching the core for nginx 0.8.42+, sigh).
Here's a small example using ngx_lua:
location / {
content_by_lua '
local res = ngx.location.capture("/getbanner")
ngx.print(res)
';
}
location /getbanner {
internal;
proxy_pass http://backend.local:3500;
}
Original ngx_eval documentation:
Documentation for this module could be found under following URLs:
* English:
http://www.grid.net.ru/nginx/eval.en.html
* Russian:
http://www.grid.net.ru/nginx/eval.ru.html
This work is commissioned by gadu-gadu.pl