The ngx_http_ubus_module
module allows access ubus function directly from nginx without using cgi or additional application to connect to it
Ubus is used in openwrt to gain and set data to the system. Alle the comunication are done in json format.
This can be used to make gui that are based on only ubus request and calls.
This is based on uhttpd-mod-ubus
module, some procedures are took from uhttpd
module.
location /ubus {
ubus_interpreter;
ubus_socket_path /var/run/ubus.sock;
ubus_script_timeout 600;
ubus_cors off;
}
Syntax: ubus_interpreter; Default: — Context: location
Enable ubus_interpreter on the location set
Syntax: ubus_socket_path; Default: — Context: location
The path to the socket the module will connect to. Without this the module will report a json error with Internal Error
Syntax: ubus_script_timeout; Default: 60 Context: location
Ubus connection will be terminated after the timeout is exceeded
Syntax: ubus_cors; Default: 0 Context: location
Adds cors header security options to every response header
Syntax: ubus_noauth; Default: 0 Context: location
Only for test purpose. This will denied every request.
With Nginx compiled with threads support --with-threads
, module will use (and requires) Nginx Thread Pool feature. As Nginx configuration suggest, this module will require in the main configuration a Thread Pool and in the location section reference to the named Thread Pool with the name ubus_interpreter
.
thread_pool ubus_interpreter threads=16;
location /ubus { ubus_interpreter; ubus_socket_path /var/run/ubus/ubus.sock; ubus_parallel_req 20; aio threads=ubus_interpreter; }
Ubus itself doesn't like concurrent request so the performance benefits from this are minimal, but this will permits to speedup and prepare each request by removing the overhead of blocking nginx execution waiting for ubus response.