Bagaimana Anda menetapkan nilai ENV khusus server di Nginx?


9

Saya memulai proyek yang menggunakan variabel lingkungan untuk mengatur koneksi database dan beberapa hal lainnya. (Mereka tidak ingin menggunakan file konfigurasi karena orang ceroboh dan menimpa mereka).

Bagaimanapun, saya menggunakan nginx dan walaupun mendukung env - sepertinya tidak cukup mendukung . Anda tidak dapat menetapkan nilai env berdasarkan basis blok per server . Dengan kata lain, ini tidak akan berhasil:

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

Anda harus melakukan ini:

env FOO = "bar";

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

Yang berarti saya tidak dapat memiliki nilai spesifik vhost. Jadi saya harus membuat konfigurasi vhost keseluruhan untuk setiap situs dan hanya mengaktifkan yang saya inginkan saat ini sehingga nilainya diatur dengan benar.

Apakah ada cara untuk mengatasi ini?


Bukankah konfigurasi nginx sama rentannya dengan menimpa seperti konfigurasi aplikasi? Modul apa yang digunakan untuk memberi makan permintaan ke aplikasi?
Shane Madden

@ShaneMadden, konfigurasi nginx bukan bagian dari proyek tetapi harus dibuat pada setiap server secara manual. Jadi itu tidak akan ditimpa. Apa yang saya posting bukan konfigurasi penuh - kami juga hanya menggunakan standar fastcgi_passuntuk meneruskan permintaan ke ruby ​​/ php.
Xeoncross

Jawaban:


13

Ternyata jika Anda menggunakan fastcgi, Anda bisa menyiasatinya dengan melewatkan nilai dari 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";
    }
}

Yup, itu yang akan saya sarankan. Kalahkan aku! (Saya kehabisan suara untuk hari ini, saya akan sedikit mengubah jawaban ini)
Shane Madden

@ShaneMadden mungkin Anda bisa membantu saya dengan ini .
Xeoncross

2
Apakah ada cara untuk mengatur server_namesecara dinamis? Karena ini adalah virtual host yang berjalan pada OS X, host nginx memiliki IP yang berbeda, sehingga tidak dapat diselesaikan.
taco
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.