Nginx से PHP में कस्टम पैरामीटर कैसे पास करें?


10

मैं एक पास के साथ Nginx 1.2.4संयोजन में उपयोग कर रहा हूं और कस्टम मापदंडों को पास करने की कोशिश कर रहा हूं । अब तक मुझे जो विकल्प मिले हैं:PHP-FPM 5.4.8fastcgiPHP

  • का उपयोग करते हुए envनिर्देश में एक वातावरण चर सेट करने के लिए nginxऔर इसके साथ लाने getenv()या $_ENVसे PHP। समस्या यह है कि envकेवल mainसंदर्भ में काम करता है जबकि मुझे संदर्भ में पैरामीटर सेट करने की आवश्यकता होती serverहै।

  • fastcgi_paramनिर्देशन का उपयोग करते हुए इसे उसी के लिए डिज़ाइन किया गया है।

मैंने कुछ मापदंडों के मूल्यों को बदलने की कोशिश की है, fastcgi_paramलेकिन असफल रहा:

nginx:

fastcgi_param PATH_INFO "/var/tmp";

पीएचपी:

मैंने सभी पूर्वनिर्धारित सरणियों की जाँच की जो मुझे मिल सकती हैं:

echo '<pre>';
echo "\n".'$GLOBALS'."\n"; var_dump($GLOBALS);
echo "\n".'$_SERVER'."\n"; var_dump($_SERVER);
echo "\n".'$_GET'."\n"; var_dump($_GET);
echo "\n".'$_POST'."\n"; var_dump($_POST);
echo "\n".'$_FILES'."\n"; var_dump($_FILES);
echo "\n".'$_REQUEST'."\n"; var_dump($_REQUEST);
echo "\n".'$_SESSION'."\n"; var_dump($_SESSION);
echo "\n".'$_ENV'."\n"; var_dump($_ENV);
echo "\n".'$_COOKIE'."\n"; var_dump($_COOKIE);
echo "\n".'$php_errormsg'."\n"; var_dump($php_errormsg);
echo "\n".'$HTTP_RAW_POST_DATA'."\n"; var_dump($HTTP_RAW_POST_DATA);
echo "\n".'$http_response_header'."\n"; var_dump($http_response_header);
echo "\n".'$argc'."\n"; var_dump($argc);
echo "\n".'$argv'."\n"; var_dump($argv);
echo '</pre>';

केवल एक दिखाने के लिए PATH_INFOथा $_SERVER:

var_dump($_SERVER); // ["PATH_INFO"]=> string(0) ""

लेकिन मेरे द्वारा निर्धारित मूल्य nginxको ध्यान में नहीं रखा गया है।

Q1: क्या मुझे निर्देश लेने के nginx/phpलिए स्तर पर कुछ भी कॉन्फ़िगर करने की आवश्यकता है fastcgi_param?

क्यू 2: fastcgi_paramनिर्देश मापदंडों की पूर्वनिर्धारित सूची तक सीमित है (जैसे मैं सेट कर सकता हूं PATH_INFOलेकिन अपने स्वयं के कस्टम चर जैसे नहीं FOO)?

Q3: यदि हाँ Q2 के लिए: क्या Nginx से PHP में कस्टम पैरामीटर पास करने का एक तरीका है?

जवाबों:


14

आप fastcgi_param निर्देश के माध्यम से अतिरिक्त पैरामीटर पास कर सकते हैं। मुझे यकीन है कि क्योंकि मैंने इस मजाक का इस्तेमाल किया है।

मेरी अनुकरणीय नग्नेक्स विन्यास

server {
    server_name localhost;
    include     conf/defaults.conf;
    root        /var/www;

    location    ~* "\.php$" {
        fastcgi_param CRS "crs";
        include conf/fastcgi-php.conf;
    }                                           
}

और phpinfo का हिस्सा () आउटपुट:

...
_SERVER["USER"] fcgi
_SERVER["HOME"] /dev/null
_SERVER["FCGI_ROLE"]    RESPONDER
_SERVER["REMOTE_USER"]  no value
_SERVER["CRS"]  crs
_SERVER["QUERY_STRING"] no value

मेरे पास है fastcgi.confऔर fastcgi_paramsनहीं है fastcgi-php.conf: आपको यह कहाँ से मिला? क्या आप इसे पास्टबिन के माध्यम से साझा करने का मन रखते हैं?
मैक्स

यह मेरा विशिष्ट विन्यास है, लेकिन इसमें कोई जादू नहीं है: fastcgi_pass 127.0.0.1:1028; fastcgi_index index.php; include conf/fastcgi.conf; और conf / fastcgi.conf में fastcgi के बाकी आवश्यक
पैरामम्स

केवल एक चीज जो मैं सोच सकता था, वह यह है कि संकलन करते समय मैं किसी चीज़ को शामिल करना भूल गया nginx। दूसरी ओर, मैं nginxअतीत में संकलन करते समय चीजों को शामिल करना भूल गया हूं , लेकिन nginxयह कहने से इनकार करना शुरू कर दूंगा कि मैं कुछ निर्देशों का उपयोग नहीं कर रहा था: यहां कुछ भी नहीं, कोई शिकायत नहीं है, लेकिन अभी तक fastcgi_paramकाम नहीं कर रहा है: (मैं मूल करने के लिए एक से आजमाएंगे ubuntu nginxपैकेज और देखें कि यह कैसे जाता है।
मैक्स

हां, यह डिफ़ॉल्ट ubuntu nginxपैकेज के साथ काम कर रहा है ...
मैक्स

@ user64204 यह निश्चित रूप से आपके कॉन्फ़िगरेशन के साथ एक समस्या थी, और ubuntu पैकेज ने आपकी कुछ कॉन्फिग फाइलों को अधिलेखित कर दिया। लेकिन जब से आपने हमें अपना पूर्ण कॉन्फ़िगरेशन नहीं दिखाया, तब तक यह निर्धारित करने का कोई तरीका नहीं है कि वास्तव में समस्या क्या थी।
VBart

0

आप अनुरोध शीर्षक में अपने कस्टम चर पास करके अनुरोध को संशोधित कर सकते हैं, उदाहरण:

proxy_set_header Variable-name-here Value-here;

और फिर आप उन मूल्यों को अपने PHP स्क्रिप्ट में अनुरोध हेडर से पढ़ सकते हैं।

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