คุณจะตั้งค่า ENV เฉพาะเซิร์ฟเวอร์ใน Nginx ได้อย่างไร


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

คำตอบ:


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";
    }
}

ใช่นั่นคือสิ่งที่ฉันจะแนะนำ เอาชนะฉันไป! (ฉันไม่ได้รับการโหวตสำหรับวันนี้ฉันจะ upvote คำตอบนี้เล็กน้อย)
Shane Madden

@ShaneMadden บางทีคุณสามารถช่วยฉันได้
Xeoncross

2
มีวิธีการตั้งค่าserver_nameแบบไดนามิกใด ๆ? เนื่องจากเป็นโฮสต์เสมือนที่ทำงานบน OS X โฮสต์ nginx จึงมี IP ที่แตกต่างกันดังนั้นจึงไม่สามารถแก้ไขได้
taco
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.