How uWSGI parses config files

Until uWSGI 1.1 the parsing order has not been ‘stable’ or ‘reliable’.

Starting from uWSGI 1.1 (thanks to its new options subsystem) we have a general rule: top-bottom and expand asap.

Top-bottom means options are internally ordered as they are parsed, while “expand asap” means to inject the options of a requested config file, interrupting the currently parsed one:

Note that the inherit option behaves differently from the other include options: It is expanded after variable expansion, so any environment variables, external files and placeholders are not expanded. Magic variables (e.g. %n) are expanded normally.

file1.ini (the one requested from the command line)

[uwsgi]
socket = :3031
ini = file2.ini
socket = :3032
chdir = /var/www

file2.ini

[uwsgi]
master = true
memory-report = true
processes = 4

internally will be assembled in:

[uwsgi]
socket = :3031
ini = file2.ini
master = true
memory-report = true
processes = 4
socket = :3032
chdir = /var/www

A more complex example:

file1.ini (the one requested from the command line)

[uwsgi]
socket = :3031
ini = file2.ini
socket = :3032
chdir = /var/www

file2.ini

[uwsgi]
master = true
xml = file3.xml
memory-report = true
processes = 4

file3.xml

<uwsgi>
  <plugins>router_uwsgi</plugins>
  <route>^/foo uwsgi:127.0.0.1:4040,0,0</route>
</uwsgi>

will result in:

[uwsgi]
socket = :3031
ini = file2.ini
master = true
xml = file3.xml
plugins = router_uwsgi
route = ^/foo uwsgi:127.0.0.1:4040,0,0
memory-report = true
processes = 4
socket = :3032
chdir = /var/www

Expanding variables/placeholders

After the internal config tree is assembled, variables and placeholder substitution will be applied.

The first step is substituting all of the $(VALUE) occurrences with the value of the environment variable VALUE.

[uwsgi]
foobar = $(PATH)

foobar value will be the content of shell’s PATH variable

The second step will expand text files embraced in @(FILENAME)

[uwsgi]
nodename = @(/etc/hostname)

nodename value will be the content of /etc/hostname

The last step is placeholder substitution. A placeholder is a reference to another option:

[uwsgi]
socket = :3031
foobar = %(socket)

the content of foobar will be mapped to the content of socket.

A note on magic variables

Config files, support another form of variables, called ‘magic’ variables. As they refer to the config file itself, they will be parsed asap:

[uwsgi]
my_config_file = %p

The content of my_config_file will be set to %p value (the current file’s absolute path) as soon as it is parsed. That means %p (or whatever magic vars you need) will be always be consistent in the currently parsing config file.

Table Of Contents

Previous topic

Defining new options for your instances

Next topic

uwsgi protocol magic variables

This Page