Nginxでサーバー固有のENV値をどのように設定しますか?


9

環境変数を使用してデータベース接続などを設定するプロジェクトを開始しています。(人々は不注意でそれらを上書きするので、彼らは設定ファイルを使いたくありませんでした)。

とにかく、私はnginxを使用していてそれはenvサポートしていますが、十分サポートしているようには見えません。サーバーブロックごとに env値を設定することはできません。つまり、これは機能しません。

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

これを行う必要があります:

env FOO = "bar";

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

つまり、vhost固有の値を設定することはできません。したがって、各サイトのvhost構成全体を作成し、値を正しく設定するために、現時点で必要なものだけをアクティブにする必要があります。

これを回避する方法はありますか?


nginxの設定は、アプリケーションの設定と同じように上書きされやすいのではないですか?アプリケーションへのリクエストのフィードにはどのモジュールを使用していますか?
シェーンマッデン

@ ShaneMadden、nginx構成はプロジェクトの一部ではありませんが、各サーバーで手動で作成する必要があります。したがって、上書きされることはありません。私が投稿したのは完全な設定ではありません-私たちは標準fastcgi_passを使用してリクエストをruby / phpに転送しています。
Xeoncross 2012年

回答:


13

fastcgiを使用している場合、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";
    }
}

うん、それは私が提案しようとしていたものです。それに負けない!(今日は投票できません。この回答には少し賛成票を入れます)
シェーンマッデン2012年

@ShaneMadden多分あなたはこれで私を助けることができます。
Xeoncross 2012年

2
server_name動的に設定する方法はありますか?これはOS Xで実行されている仮想ホストであるため、nginxホストのIPは異なるため、解決されません。
taco
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.