10

I am starting a project that uses environment variables to set the database connection and a couple other things. (They didn't want to use configuration files since people are careless and overwrite them).

Anyway, I am using nginx and while it supports env - it doesn't seem to support it well enough. You can't set the env values on a per-server block basis. In other words, this won't work:

server {
    listen 80;
    server_name domain;
    env FOO = "bar";
}

You must do this:

env FOO = "bar";

http {
    server {
        listen 80;
        server_name domain;
    }
}

Which means that I can't have vhost-specific values. So I must create a whole vhost config for each site and only activate the one I want at the moment so that the value is set correctly.

Is there any way to work around this?

2
  • Isn't the nginx config just as susceptible to overwriting as the application's config? What module is it using to feed requests to the application? Jan 19, 2012 at 22:36
  • @ShaneMadden, the nginx config isn't part of the project but must be created on each server manually. So it won't be overwritten. What I posted isn' the full configs - we are also just using standard fastcgi_pass to forward the request to ruby/php.
    – Xeoncross
    Jan 19, 2012 at 22:40

1 Answer 1

16

It turns out that if you are using fastcgi you can get around this by passing the values from fastcgi_param.

server {
    listen 80;
    server_name domain;

    # Pass PHP scripts to php-fastcgi listening on port 9000
    location ~ path/to/it {
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param FOO "bar";
    }
}
3
  • Yup, that's what I was about to suggest. Beat me to it! (I'm out of votes for today, I'll upvote this answer in a bit) Jan 19, 2012 at 23:01
  • @ShaneMadden perhaps you could help me with this.
    – Xeoncross
    Jan 19, 2012 at 23:12
  • 2
    Is there any way to set server_name dynamically, though? Since it's a virtual host running on OS X, the nginx host has a different IP, so it doesn't resolve.
    – taco
    Sep 18, 2015 at 3:32

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.