18

In an nginx conf file, is there any way to specify the include to another conf file relative to the current conf file?

I would like to write:

server {
  listen       80;
  server_name  localhost;

  include "../apis/basic.conf";

...
} 
3
  • 3
    Nope. All paths are either absolute or relative to prefix path nginx.org/en/docs/configure.html
    – Alexey Ten
    May 12, 2015 at 7:15
  • 2
    Guessing at your file and folder layout, include apis/basic.conf; would probably just work. For example, this include is relative to the config root, so includes this file.
    – AD7six
    May 12, 2015 at 8:25
  • 1
    Changes with nginx 0.6.7 15 Aug 2007 *) Change: now the paths specified in the "include", "auth_basic_user_file", "perl_modules", "ssl_certificate", "ssl_certificate_key", and "ssl_client_certificate" directives are relative to directory of nginx configuration file nginx.conf, but not to nginx prefix directory. Jul 14, 2020 at 10:31

2 Answers 2

6

The Nginx docs for the include directive don't document how relative paths are handled (as of release 1.9.15). My reading of the C code is that the path must be absolute or relative to the prefix path, as Alexey Ten offered in a comment.

Here's a related link to the source code.

2
  • 1
    I just tested on nginx 1.10.3. Setting the -p to . and tried including ./nginx.conf from a config file stored in /tmp. It errors by telling me that it cannot find /tmp/./nginx.conf. Either the -p option doesn't do it, or inclusion only includes relative to the config file, or my nginx is broken. Feb 8, 2017 at 13:26
  • 1
    The -p option only affects where nginx command looks for the config file. Using nginx -p . -c ./nginx.conf will make nginx command look for ./nginx.conf, otherwise without it, it will lookup the prefix path for the ./nginx.conf. Feb 8, 2017 at 13:32
5

Similar to what Alexy Ten commented on above, the default prefix will be used. But according to this StackOverflow post: https://stackoverflow.com/a/25486871/1684819 the -p option can be provided to declare where all relative paths will be referenced to instead of the default compiled-in path.

1

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .