eval: Bewerten Sie die Antwort von memcached oder Proxy in eine Variable
Installation
Sie können dieses Modul in jeder RHEL-basierten Distribution installieren, einschließlich, aber nicht beschränkt auf:
- RedHat Enterprise Linux 7, 8, 9 und 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 und Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-eval
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-eval
Aktivieren Sie das Modul, indem Sie Folgendes an den Anfang von /etc/nginx/nginx.conf hinzufügen:
load_module modules/ngx_http_eval_module.so;
Dieses Dokument beschreibt nginx-module-eval v2016.6.10 veröffentlicht am 10. Februar 2016.
# ein Beispiel für die Arbeit mit den ngx_drizzle + ngx_rds_json
# Modulen, aber Sie müssen ngx_rds_json *nach*
# ngx_eval während der nginx-Konfiguration setzen, zum Beispiel:
# ./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; # standard 4k, wird abgeschnitten, wenn überflutet
eval $res {
drizzle_query "select * from cats";
drizzle_pass my_mysql_backend;
rds_json on;
}
# jetzt enthält $res das im JSON-Format formatierte Ergebnis
if ($res ~ '"Tom"') {
echo "Die Tom-Katze wurde gefunden!";
break;
}
echo "Die Tom-Katze fehlt!";
}
# ein Beispiel für die Arbeit mit dem ngx_postgres-Modul
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;
}
# Ihre Einstellungen für den Inhalts-Handler...
}
Beschreibung
Dieser Fork von ngx_eval kann mit beliebigen Inhalts-Handlern arbeiten und
sogar mit aktivierten Filtern, solange Sie ngx_eval vor
Ihren Filtermodulen während der nginx-Konfiguration setzen, zum Beispiel
./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
sodass der Filter von ngx_eval nach Ihren Filtermodulen funktioniert.
Seit NGINX 1.9.11 können Sie dieses Modul auch als dynamisches Modul kompilieren, indem Sie die Option --add-dynamic-module=PATH anstelle von --add-module=PATH in der
./configure-Befehlszeile oben verwenden. Und dann können Sie das Modul explizit in Ihrer nginx.conf über die load_module
Direktive laden, zum Beispiel,
load_module /path/to/modules/ngx_http_eval_module.so;
Verwenden Sie stattdessen Lua
Heutzutage bevorzugen wir jedoch ngx_lua, um die Aufgaben zu erledigen, die ursprünglich von ngx_eval durchgeführt wurden,
aufgrund verschiedener inhärenter Einschränkungen in ngx_eval.
Hier ist ein kleines Beispiel mit 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 ...;
}
dies ist ungefähr gleichwertig mit
location / {
eval $res {
proxy_pass http://blah.blah/checker;
}
if ($res ~ 'SPAM') {
rewrite ^ /terms-of-use redirect;
break;
}
fastcgi_pass ...;
}
Obwohl das Lua-Beispiel etwas länger ist, ist es viel flexibler und stabiler.
Einschränkungen
- Die Inhalte von Subanfragen, die innerhalb des eval-Blocks ausgegeben werden (wie die, die von echo_subrequest ausgelöst werden), werden nicht richtig erfasst.
Nginx-Kompatibilität
Die folgenden Versionen von Nginx sollten mit diesem Modul funktionieren:
- 1.9.x (zuletzt getestet: 1.9.7)
- 1.8.x
- 1.7.x (zuletzt getestet: 1.7.7)
- 1.5.x (zuletzt getestet: 1.5.12)
- 1.4.x (zuletzt getestet: 1.4.4)
- 1.3.x (zuletzt getestet: 1.3.11)
- 1.2.x (zuletzt getestet: 1.2.9)
- 1.1.x (zuletzt getestet: 1.1.5)
- 1.0.x (zuletzt getestet: 1.0.15)
- 0.9.x (zuletzt getestet: 0.9.4)
- 0.8.0 ~ 0.8.41, 0.8.54+ (0.8.42 ~ 0.8.53 erfordert Patching, siehe unten) (zuletzt getestet: 0.8.54)
- 0.7.x >= 0.7.21 (zuletzt getestet: 0.7.68)
Beachten Sie, dass nginx 0.8.42 ~ 0.8.53 aufgrund einer berühmten Regression seit 0.8.42 nicht funktioniert.
Originale ngx_eval-Dokumentation
Die Dokumentation für dieses Modul finden Sie unter folgenden URLs:
Diese Arbeit wurde von gadu-gadu.pl in Auftrag gegeben.
Siehe auch
- das ngx_lua Modul.
GitHub
Sie finden zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub Repository für nginx-module-eval.