Description
This module can be used to update your upstream-list without reloadding Nginx.
TODO:
It can not work with common `nginx_upstream_check_module`.
Compilation
The module is not compiled into Tengine by default. It can be enabled with '--with-http_dyups_module'
configuration parameter, and enabled lua support with '--with-http_dyups_lua_api'.
But it can not be compiled as a '.so'.
Example
file: conf/nginx.conf
daemon off; |
file: conf/upstream.conf
upstream host1 { |
Directives
Syntax: _dyups_interface_
Default: none
Context: loc
This directive set the interface location where you can add or delete the upstream list. See the section of Interface for detail.
Syntax: _dyups_read_msg_timeout time_
Default: _1s_
Context: main
This directive set the interval of workers readding the commands from share memory.
Syntax: _dyups_shm_zone_size size_
Default: _2M_
Context: main
This directive set the size of share memory which used to store the commands.
Syntax: _dyups_upstream_conf path_
Default: none
Context: main
This directive set the path of file which you dumped all of upstreams' configs, it will be loaded in init process
after process respwan to restore upstreams.
Syntax: _dyups_trylock on | off_
Default: off
Context: main
You will get a better prefomance but it maybe not stable, and you will get a '409' when the update request conflicts with others.
restful interface
/detail
get all upstreams and their servers/list
get the list of upstreams/upstream/name
find the upstream by it's name/upstream/name
update one upstreambody
commands;body
server ip:port;/upstream/name
delete one upstream
Call the interface, when you get the return code is HTTP_INTERNAL_SERVER_ERROR 500
, you need to reload nginx to make the Nginx work at a good state.
If you got HTTP_CONFLICT 409
, you need resend the same commands again latter.
The /list and /detail interface will return HTTP_NO_CONTENT 204
when there is no upstream.
Other code means you should modify your commands and call the interface again.
ATTENEION
: You also need a third-party
to generate the new config and dump it to Nginx'conf directory.
» curl -H "host: dyhost" 127.0.0.1:8080 |
API
extern ngx_flag_t ngx_http_dyups_api_enable; |
NOTICE:
you should add the directive dyups_interface
into your config file to active this feature
content_by_lua ' |