यदि nginx चर सेट है तो परीक्षण करें


15

यदि यह पहले से सेट नहीं है, तो मुझे एक चर को एक डिफ़ॉल्ट मान पर सेट करने की आवश्यकता है। निम्नलिखित विन्यास कार्य करता है:

if ($foo ~ "^$") {
   set $foo default-value;
}

लेकिन यह रनटाइम चेतावनी देता है:

असिंचित "फू" चर का उपयोग करना

क्या परीक्षण का कोई तरीका है अगर कोई चर चेतावनी के बिना और विश्व स्तर पर चेतावनी को बंद किए बिना सेट किया गया है:

uninitialized_variable_warn off;

github.com/openresty/set-misc-nginx-moduleset_if_empty से कोशिश करें
SaveTheRbtz

2
बस कुछ इसी तरह की तलाश करते हुए यह पाया गया, लेकिन ऐसा लगता है कि इसे uninitialized_variable_warnविश्व स्तर पर स्थापित करने की आवश्यकता नहीं है, आप बस इसे सेट कर सकते हैं, जहां आपको संभावित असंगठित चर का उपयोग करने की आवश्यकता है। मैं इसका उपयोग SSL विवरण को PHP में पारित करने के लिए कर रहा हूं, जो पेज SSL के बिना एक्सेस किए जाने पर खाली हो जाएगा।
हरविकांक

@ हार्विक यह ऐसा लगता है कि ऐसा नहीं हैnginx: [emerg] "uninitialized_variable_warn" directive is duplicate in
n1te

क्या आपने अभी भी इसे कहीं और सेट किया है? मैं उपयोग कर रहा हूँ uninitialized_variable_warnएक के हिस्से के रूप php.confकि आयातित है केवल उन्हीं स्थानों है कि PHP समर्थन करते हैं, तो मैं निश्चित रूप से यह केवल उन कार्यक्षेत्रों में उपयोग कर रहा हूँ, जबकि अन्य सभी स्थानों चेतावनी को छोड़ कर। मैंने uninitialized_variable_warnहालांकि किसी भी अन्य दायरे में सेट नहीं किया है (इसे डिफ़ॉल्ट रूप से देना true)।
हरविकांक

जवाबों:


11

यदि चर मौजूद है, तो मैं जाँच करने के लिए निम्नलिखित का उपयोग कर रहा हूँ:

if ($dir = false) {
    set $dir "";
}

यदि यह इस स्थान ब्लॉक में पहुंचने से पहले सेट नहीं होता है, तो यह इसे एक रिक्त स्ट्रिंग पर सेट कर देगा। आप बस उद्धरणों के बीच आसानी से एक स्ट्रिंग जोड़ सकते हैं। इसका उपयोग करते हुए विन्यास परीक्षण करते समय मुझे कोई त्रुटि नहीं मिलती है।

कृपया मुझे बताएं कि क्या आप अन्यथा देख रहे हैं।


मैं नाज़िनक्स देख रहा हूँ: [एमआरजी] अज्ञात "दिर" चर
एलेक्स बार्कर

1
यह झूठी जाँच अब काम नहीं करती है, कृपया उपयोग करें$foo ~ "^$"
Valdrinium

2

ऐसा लगता है कि व्यवहार बदल गया है या कम से कम क्वेरी पैरामीटर मानों का उपयोग करने के लिए अलग है $arg_<name>। Nginx 1.13.6 पर, निम्न जाँचने के लिए कि क्या ngx चर में कोई क्वेरी मान मौजूद है:

if ($arg_test = false) {
    default_type 'text/plain';
    return 404;
}

404 पास नहीं करता है।

if ($arg_test = '') {
    default_type 'text/plain';
    return 404;
}

404 देता है, यदि क्वेरी पैरामीटर मौजूद नहीं है। यदि आवश्यक क्वेरी पैरामीटर मौजूद नहीं है, तो अपस्ट्रीम से टकराने के लिए उपयोगी नहीं है।



0

एक आसान विकल्प, यदि आप वैकल्पिक रूप से शामिल फ़ाइल में चर सेट कर रहे हैं, तो बस पहले डिफ़ॉल्ट मान सेट करना है।

set $value 'default';
include maybe-set-value.conf;

Conf फ़ाइल में दूसरा सेट स्टेटमेंट डिफ़ॉल्ट मान को बदल देगा।

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