Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Tree: 623aaa75fd
Fetching contributors…

Cannot retrieve contributors at this time

143 lines (110 sloc) 4.185 kB
Status
This module is experimental and production use is discouraged.
If you want similar (but more powerful) functionalities, see
the ngx_lua module instead:
http://github.com/chaoslawful/lua-nginx-module
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 within the eval block
(like those fired by echo_subrequest) won't be
captured properly.
Compatibility
The following versions of Nginx should work with this module:
* 0.9.x (last tested: 0.9.4)
* 0.8.0 ~ 0.8.41, 0.8.54+ (0.8.42 ~ 0.8.53 requires patching, see below)
(last tested: 0.8.54)
* 0.7.x >= 0.7.21 (last tested: 0.7.68)
Note that nginx 0.8.42 ~ 0.8.53 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 ~ 0.8.53.
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 = /filter-spam {
internal;
proxy_pass http://blah.blah/checker;
}
location / {
rewrite_by_lua '
local res = ngx.location.capture("/filter-spam")
if res.status ~= ngx.HTTP_OK or res.body == nil then
return
end
if string.match(res.body, "SPAM") then
return ngx.redirect("/terms-of-use")
end
';
fastcgi_pass ...;
}
this is roughly equivalent to
location / {
eval $res {
proxy_pass http://blah.blah/checker;
}
if ($res ~ 'SPAM') {
rewrite ^ /terms-of-use redirect;
break;
}
fastcgi_pass ...;
}
Even though the Lua example is a little longer but is much more flexible
and stable.
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
Jump to Line
Something went wrong with that request. Please try again.