Próbuję użyć modułu Lua w nginxie do ustawienia zmiennej ("foo") opartej na JSON w treści żądania. Następnie chcę zapisać wartość tej zmiennej w dzienniku dostępu.Zapisywanie zmiennej ustawionej przez moduł Luigi nginxa
tak:
http {
log_format mylogfmt '$remote_addr - $remote_user [$time_local] \
"$request" $status $body_bytes_sent "$http_referer" \
"$http_user_agent" "$foo"'
}
location/{
proxy_pass http://remote-server.example.com/;
proxy_set_header X-Real-IP $remote_addr;
proxy_connect_timeout 150;
proxy_send_timeout 100;
proxy_read_timeout 100;
proxy_buffers 4 32k;
client_max_body_size 8m;
client_body_buffer_size 128k;
rewrite_by_lua '
cjson = require "cjson"
ngx.req.read_body()
body_table = cjson.decode(ngx.var.request_body)
ngx.var.foo = body_table["foo"]
';
access_log /var/log/nginx/access.log mylogfmt;
}
Jednak nginx nie uruchomi się przy tej konfiguracji. Zarzuca wygląda następująco:
[email protected]:~$ sudo /etc/init.d/nginx reload
Reloading nginx configuration: nginx: [emerg] unknown "foo" variable
nginx: configuration file /etc/nginx/nginx.conf test failed
Próbowałem dodanie zestawu $ foo „«-»” do lokalizacji, ale to po prostu wydaje się, aby zastąpić to, co robię w Lua.
Myśli?
nginx mówi, że nie zadeklarowano zmiennej 'foo'. Masz rację, że powinieneś ustawić '$ foo' przed wywołaniem' rewrite_by_lua'. Jak myślisz, dlaczego to zastępuje to, co robisz w Lua? – catwell