The NGINX WEB server can be used to support the RESTCONF protocol within netconfd-pro.
The 17.10-4 release (or later) must be used.
Example instructions to install NGINX on Ubuntu:
sudo apt-get update sudo apt-get upgrade sudo apt-get dist-upgrade sudo apt-get install nginx fcgiwrap nginx-doc spawn-fcgi sudo systemctl enable nginx
NOTE: If your system already has another WEB server installed, such as Apache, you must do at least one of the following prior to installing NGINX:
Stop the existing WEB server process. Example:
sudo service apache2 stop
OR Remove the existing WEB server entirely. Example:
sudo apt-get remove apache2
OR Configure the existing WEB server to listen on a port other than 80. Example of Apache's /etc/apache2/ports.conf file configured to listen on 8080:
# If you just change the port or add more ports here, you will likely also # have to change the VirtualHost statement in # /etc/apache2/sites-enabled/000-default.conf Listen 8080 <IfModule ssl_module> Listen 443 </IfModule> <IfModule mod_gnutls.c> Listen 443 </IfModule> # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Confirm the location of the "restconf" program, which is needed to set the FASTCGI_FILENAME variable below
- If the server is built from sources the program should be installed as /var/www/yang-api/restconf
- If the server is installed from a package, the program should be installed as /usr/sbin/restconf
Example NGINX configuration file:
> nano /etc/nginx/sites-available/restconf
Make sure to disable default site before using the newly created restconf site.
> rm /etc/nginx/sites-available/default
The following config file is installed as /usr/share/yumapro/util/restconf-nginx
# # RESTCONF server configuration # server { listen 80; listen [::]:80; ### CHANGE ServerName TO YOUR DOMAIN NAME!!! server_name localhost; ### Set the root to /var/www/yang-api for all locations root /var/www/yang-api; ### need to install fcgiwrap to use RESTCONF ### set SCRIPT_FILENAME to the location of the restconf program location /restconf { ### Disable gzip (it makes scripts feel slower since they have to complete ### before getting gzipped) gzip off; ### Fastcgi socket fastcgi_pass unix:/var/run/fcgiwrap.socket; ### Fastcgi parameters, include the standard ones include /etc/nginx/fastcgi_params; ### Actual executable fastcgi_param SCRIPT_NAME restconf; ### Complete path to the script. ### When set, overrides DOCUMENT_ROOT and SCRIPT_NAME fastcgi_param SCRIPT_FILENAME /var/www/yang-api/restconf; ### When set (e.g., to ""), disables fastcgiwrap output buffering. ### MUST be set if SSE used! ### Only available in fcgiwrap version 1.1.0-11 and higher! ### Only available on Debian maintained version of fcgiwrap! ### RPM users may choose to patch their fcgiwrap.c file to add ### NO_BUFFERING functionality. ### https://github.com/gnosek/fcgiwrap/pull/48/files fastcgi_param NO_BUFFERING ""; ### When buffering is disabled, the response is passed to a ### client synchronously, immediately as it is received. ### Nginx will not try to read the whole response from the ### FastCGI server. ### MUST be set if SSE used fastcgi_buffering off; ### This is the maximum time limit for request handling. ### If a FastCGI request does not complete within this timeout ### seconds, it will be subject to termination. ### Set to big number if SSE used fastcgi_read_timeout 120s; } location /.well-known { default_type application/xrd+xml; etag off; add_header Last-Modified ""; } }
Troubleshooting
- Make sure that the "restconf" program is installed in proper place:
fastcgi_param SCRIPT_FILENAME /var/www/yang-api/restconf;
Check permissions and ownership.
If the restconf exists in /usr/sbin/restconf location, try to run the server with "sudo" and --fileloc-fhs=true:
mydir> sudo netconfd-pro --fileloc-fhs=true
If you use yangcli-pro and connect it using RESTCONF protocol, by default the session will be terminated after 65 seconds since the default value for keepalive_timeout parameter is 65s
In order to allow yangcli-pro to be connected for a longer period of time edit nginx.conf file and add the following parameters:
http { ## The number of requests a client can make over a single ## keepalive connection. The default is 100, but a much higher ## value can be especially useful for testing with a ## load‑generation tool, which generally sends a large number ## of requests from a single client. keepalive_requests 200; ## How long to allow each connection to stay idle; longer values are better ## for each individual client, particularly for SSL, but means that worker ## connections are tied up longer. (Default: 65) ## Set to big number to maintain yangcli-pro RESTCONF session alive keepalive_timeout 1000; }
After that the RESTCONF session in the yangcli-pro will not be terminated after 65 seconds.