Apache में SetEnv के समान Nginx चर?


82

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

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

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

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

जवाबों:


57

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


1
धन्यवाद, यह चाल है। पर्ल कैटलिस्ट का उपयोग करने वाले लोगों के लिए, आवश्यक मूल्य $ c-> इंजन-> env -> {MY_CUSTOM_VARIABLE} में है, php में $ _SERVER के समान है। [लिंक] search.cpan.org/dist/Catalyst-Runtime/lib/Catalyst/Engine.pm
MIguelele

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

@MIguelele, वैरिएबल चेन $ c-> इंजन-> env -> {SOME_ENV_VAR} कड़ाई से $ ENV {SOME_ENV_VAR} के समान है जो Fastcgi इंटरफ़ेस द्वारा वितरित किया गया है।
ज़नीक

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

लेकिन यह PHP-CGI के लिए है


22
मैं सोच रहा हूँ कि सही पर टिप्पणियों का उद्देश्य क्या है :-)
lks128

मुझे लगता है कि वह सिर्फ एक टिप्पणी के रूप में अपाचे के बराबर दिखाना चाहते थे
लूलियाकोनो

5
तब वह काफी बुरी तरह से विफल हो गया, क्योंकि यह कैसे अपाचे में पर्यावरण चर को परिभाषित करने के लिए नहीं है।
राइटफोल्ड

... लेकिन अभी भी बहुत उपयोगी ;-)
मिशैल गैलोविक

1
और खाली मूल्यों के लिए मूल्य भाग में सिर्फ '' डालें
सबिन

41

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

php-cgi

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

php-एफ पी एम

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

11

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

        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 अक्सर इस तरह दिखता है फ़ाइल:

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;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.