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";

...
} 
Alex Rothberg
  • 481
  • 2
  • 4
  • 8
  • 3
    Nope. All paths are either absolute or relative to prefix path http://nginx.org/en/docs/configure.html – Alexey Ten May 12 '15 at 07:15
  • 2
    Guessing at your file and folder layout, `include apis/basic.conf;` would probably just work. For example, [this include](https://github.com/h5bp/server-configs-nginx/blob/master/sites-available/example.com#L36) is relative to the config root, so includes [this file](https://github.com/h5bp/server-configs-nginx/blob/master/h5bp/basic.conf). – AD7six May 12 '15 at 08: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. – virusdefender Jul 14 '20 at 10:31

2 Answers2

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.

Mark Stosberg
  • 3,901
  • 24
  • 28
  • 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. – CMCDragonkai Feb 08 '17 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`. – CMCDragonkai Feb 08 '17 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.

xobes
  • 51
  • 1
  • 1