1

I got 2 domains dev.domain.com and beta.domain.com. At the moment I have one server section (default) with a bunch of specific locations and rules. Now I need to password protect beta.domain.com. Is there a way to do this without creating additional server section and essentially duplicating all my location and other rules?

Generally I would like to know how other people manage complex nginx configurations. Do they just copy sections (duplicate) or include common rules somehow?

gansbrest
  • 835
  • 2
  • 9
  • 17
  • 1
    You can place the common rules in a file and use the include directive to include that file - that way any changes only need to made in one location. Alternatively, you can use regex captures to set a variable to the subdomain, and apply some logic to include the the authentication when the variable matches the beta subdomain. – cyberx86 Nov 22 '11 at 22:18
  • That's what I was trying to do actually, define subdomain variable and then include basic authentication inside if statement. But it seems like auth statements are not allowed inside if, same with try_files.. – gansbrest Nov 22 '11 at 22:25

1 Answers1

1

The simplest way to share a configuration between multiple server blocks, is using the include directive. For instance:

/etc/nginx/conf.d/mysite.inc:

#...locations and rules...

/etc/nginx/sites-available/dev.domain.com:

server {
    server_name dev.domain.com;
    root /path/to/root;
    include /etc/nginx/conf.d/mysite.inc;
}

/etc/nginx/sites-available/beta.domain.com:

server {
    server_name beta.domain.com;
    root /path/to/root;
    include /etc/nginx/conf.d/mysite.inc;
    location / {
        auth_basic "Authentication Required";
        auth_basic_user_file  /path/to/authfile;
    }
}
cyberx86
  • 20,805
  • 1
  • 62
  • 81