2011-11-11 13 views
63

मैं वर्चुअलहोस्ट में कुछ चर सेट करने के लिए अपाचे में SetEnv का उपयोग करता हूं जिसे मैं $_SERVER[the_variable] का उपयोग करके PHP में पुनर्प्राप्त करता हूं।अपाचे में SetEnv के समान Nginx चर?

अब मैं पर्ल उत्प्रेरक और निजिनक्स पर स्विच कर रहा हूं, लेकिन ऐसा लगता है कि Nginx में "env" निर्देश समान नहीं है। यह काम नहीं करता। यह कैसे पूरा किया जा सकता है?

यहां पृष्ठभूमि चित्र है, अगर कोई बेहतर दृष्टिकोण सुझा सकता है या मेरी पिछली प्रणाली Nginx के साथ काम नहीं करती है।

  • मैं कई डोमेन के लिए एक ही ऐप का उपयोग करता हूं। सभी डेटा एक ही संरचना के साथ विभिन्न डेटाबेस से आता है।
  • डेटाबेस नाम उस पर्यावरण चर में वर्चुअल होस्ट को हार्डकोड किया गया है।
  • जैसा कि मुझे डेटाबेस नाम पता है, सभी प्रश्न पहली क्वेरी से अपने उचित डेटाबेस पर जाते हैं।
  • मेरे पास एक ही डेटाबेस का उपयोग करके एकाधिक डोमेन हो सकते हैं, केवल निर्देशों में समान चर सहित।

उत्तर

46

एनजीआईएनएक्स अपाचे की तरह आपकी बैकएंड प्रक्रियाओं का प्रबंधन नहीं करता है, इसलिए यह उनके वातावरण को प्रभावित नहीं कर सकता है। एनजीआईएनएक्स से एक नया $_SERVER PHP वैरिएबल सेट करने के लिए, आपको बाकी के साथ एक नया fastcgi_param एंट्री जोड़ना होगा। आप जहां भी fastcgi_params या fastcgi.conf शामिल हैं।

+0

धन्यवाद, यह करता है:

 location ~ \.php$ { fastcgi_pass unix:/your_sock_location/nginxFastCGI.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param APP_ENV production; include fastcgi_params; } 

fastcgi_params एक ही निर्देशिका में स्थित फ़ाइल के रूप में nginx.conf अक्सर इस तरह दिखता है चाल। पर्ल उत्प्रेरक का उपयोग करने वाले लोगों के लिए, आवश्यक मूल्य $ c-> इंजन-> env -> {MY_CUSTOM_VARIABLE} है, जो php में $ _SERVER के समान है। [लिंक] http://search.cpan.org/dist/Catalyst-Runtime/lib/Catalyst/Engine.pm – MIguelele

+0

यह मेरे लिए सच नहीं है ... जब मैं इस तरह के चर सेट करता हूं, तो मैं केवल चर को पुनः प्राप्त कर सकता हूं Getenv विधि के माध्यम से। चर $ _SERVER सरणी में नहीं जोड़ा गया है। –

88
location/{ 
... 
    fastcgi_param APPLICATION_ENV production; 
    fastcgi_param APPLICATION_CONFIG user; 
... 
} 

लेकिन यह पीएचपी-सीजीआई

+21

मुझे आश्चर्य है कि दाईं ओर टिप्पणियों का उद्देश्य क्या है :-) – Andrew

+0

मुझे लगता है कि वह सिर्फ – lloiacono

+5

टिप्पणी के रूप में अपाचे को दिखाना चाहता था, फिर वह काफी भयंकर रूप से विफल रहा, क्योंकि यह अपाचे में पर्यावरण चर को परिभाषित करने का तरीका नहीं है । – rightfold

32

आप ध्यान में रखना चाहिए के लिए है, कि nginx php प्रक्रियाओं का प्रबंधन नहीं है अपाचे की तरह। आपको या तो php-fpm, या php-cgi कॉन्फ़िगर करना चाहिए, जो आपके सर्वर पर php चलाता है।

php-cgi

... 
env[APP_ENV] = production 
... 

php-एफ पी एम

location/{ 
    ... 
    fastcgi_param APP_ENV production; 
    ... 
} 
5

fastcgi_pass सॉकेट स्थान तो fastcgi_param मापदंडों में से प्रत्येक के पहले आने के लिए, की जरूरत है। आप nginx कॉन्फ़िगरेशन फ़ोल्डर में किसी फ़ाइल में चर सूचीबद्ध कर सकते हैं, फिर उस फ़ाइल को शामिल करें। फ़ाइल में आमतौर पर नाम fastcgi_params है। आपका पर्यावरण मापदंडों php हैंडलिंग ब्लॉक करने के लिए आसानी से जोड़ा जा सकता है:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
fastcgi_param QUERY_STRING  $query_string; 
fastcgi_param REQUEST_METHOD  $request_method; 
fastcgi_param CONTENT_TYPE  $content_type; 
fastcgi_param CONTENT_LENGTH  $content_length; 

fastcgi_param SCRIPT_NAME  $fastcgi_script_name; 
fastcgi_param REQUEST_URI  $request_uri; 
fastcgi_param DOCUMENT_URI  $document_uri; 
fastcgi_param DOCUMENT_ROOT  $document_root; 
fastcgi_param SERVER_PROTOCOL $server_protocol; 
fastcgi_param HTTPS    $https if_not_empty; 

fastcgi_param GATEWAY_INTERFACE CGI/1.1; 
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; 

fastcgi_param REMOTE_ADDR  $remote_addr; 
fastcgi_param REMOTE_PORT  $remote_port; 
fastcgi_param SERVER_ADDR  $server_addr; 
fastcgi_param SERVER_PORT  $server_port; 
fastcgi_param SERVER_NAME  $server_name; 
संबंधित मुद्दे