15

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.