Làm thế nào để bạn đặt giá trị ENV cụ thể của máy chủ trong Nginx?


9

Tôi đang bắt đầu một dự án sử dụng các biến môi trường để thiết lập kết nối cơ sở dữ liệu và một vài thứ khác. (Họ không muốn sử dụng các tệp cấu hình vì mọi người bất cẩn và ghi đè lên chúng).

Dù sao, tôi đang sử dụng nginx và trong khi nó hỗ trợ env - có vẻ như nó không hỗ trợ đủ tốt . Bạn không thể đặt các giá trị env trên cơ sở khối trên mỗi máy chủ . Nói cách khác, điều này sẽ không hoạt động:

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

Bạn phải làm điều này:

env FOO = "bar";

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

Điều đó có nghĩa là tôi không thể có các giá trị cụ thể của vhost. Vì vậy, tôi phải tạo toàn bộ cấu hình vhost cho mỗi trang web và chỉ kích hoạt trang tôi muốn vào lúc này để giá trị được đặt chính xác.

Có cách nào để làm việc này không?


Không phải cấu hình nginx có dễ bị ghi đè như cấu hình của ứng dụng không? Nó sử dụng mô-đun nào để cung cấp yêu cầu cho ứng dụng?
Shane Madden

@ShaneMadden, cấu hình nginx không phải là một phần của dự án nhưng phải được tạo thủ công trên mỗi máy chủ. Vì vậy, nó sẽ không bị ghi đè. Những gì tôi đã đăng không phải là cấu hình đầy đủ - chúng tôi cũng chỉ sử dụng tiêu chuẩn fastcgi_passđể chuyển tiếp yêu cầu tới ruby ​​/ php.
Xeoncross

Câu trả lời:


13

Nó chỉ ra rằng nếu bạn đang sử dụng fastcgi, bạn có thể khắc phục điều này bằng cách chuyển các giá trị từ 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, đó là những gì tôi đã đề nghị. Đánh tôi đi (Tôi đã hết phiếu cho ngày hôm nay, tôi sẽ đưa ra câu trả lời này một chút)
Shane Madden

@ShaneMadden có lẽ bạn có thể giúp tôi với điều này .
Xeoncross

2
Có cách nào để thiết lập server_nameđộng, mặc dù? Vì là máy chủ ảo chạy trên OS X, máy chủ nginx có IP khác, vì vậy nó không giải quyết được.
taco
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.