Bug in the nginx-0.7.xx include .../conf.d/*.conf process ?
mdounin at mdounin.ru
Sun Mar 22 20:27:26 MSK 2009
On Sun, Mar 22, 2009 at 12:07:42PM +0000, Mark Alan wrote:
> In Debian/Ubuntu systems (also in .rpm based systems?) /conf.d/*.conf
> files are used to (automatically) supersede any configuration originally
> put in the main .conf file (nginx.conf) by the program
> In the file /etc/nginx/nginx.conf (or
> /usr/local/nginx/conf/nginx.conf, if installed from source) there is
> supposed to that, loading alternative config files: include
> In nginx-0.7.43 creating a file at .../conf.d/my_own.conf with the
> keepalive_timeout 10 10;
> gzip on;
> gzip_min_length 640;
> Will lead, when trying to restart nginx, to a nginx halt with an error
> message like:
> " [emerg] 9242#0: "keepalive_timeout" directive is duplicate in
> In the absence of a better opinion, it seems that it would make more
> sense if, instead, the new values superseed any already existant
> parameters in nginx.conf and nginx give the user a warning message
> listing the parameters being superseeded.
> Ideally any 20-my_own.conf file would be read after and superseed any
> values in a 10-my_own.conf file, wich in turn would be read after and
> superseed any values in nginx.conf
> Regarding any new parameters not present in any previous *.conf, nginx
> would simply read and add them without any further warning.
This is not bug, it's by design. And this allows to catch obvious
configuration errors easily - without even breaking working setup,
since nginx master process will refuse to reload configuration
with bugs (and hence old worker processes with correct
configuration will continue to serve requests).
Also I should say that debian default config layout for nginx is
rather bad, since it provokes many configuration bugs. Some of
them are easy to find thanks to duplication checks, but some are
really hard to find.
More information about the nginx