/nginx-ubus-module

Nginx module to interact with penwrt ubus daemon

Primary LanguageCBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

Donate License

Module ngx_http_read_request_body_module

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.

Configuration example

location /ubus {
        ubus_interpreter;
        ubus_socket_path /var/run/ubus.sock;
        ubus_script_timeout 600;
        ubus_cors off;
}

Directives

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.

Thread support

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.