ทดสอบว่ามีการตั้งค่าตัวแปร nginx


14

ฉันจำเป็นต้องตั้งค่าตัวแปรให้เป็นค่าเริ่มต้นหากยังไม่ได้ตั้งค่า config ต่อไปนี้ทำงาน:

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

แต่มันสร้างคำเตือนรันไทม์:

ใช้ตัวแปร "foo" โดยไม่กำหนดค่าเริ่มต้น

มีวิธีทดสอบว่าตัวแปรถูกตั้งค่าโดยไม่สร้างคำเตือนหรือไม่และปิดการเตือนทั่วโลกด้วย:

uninitialized_variable_warn off;


2
เพิ่งพบสิ่งนี้ในขณะที่กำลังมองหาสิ่งที่คล้ายกัน แต่ดูเหมือนว่าuninitialized_variable_warnไม่จำเป็นต้องตั้งค่าทั่วโลกคุณสามารถตั้งค่าที่คุณต้องการใช้ตัวแปรที่อาจไม่ได้กำหนดค่าเริ่มต้น ฉันใช้สิ่งนี้ในการส่งรายละเอียด SSL ไปยัง PHP ซึ่งจะว่างเปล่าหากมีการเข้าถึงหน้าเว็บโดยไม่มี SSL
Haravikk

@Haravikk ดูเหมือนว่าไม่ใช่กรณีnginx: [emerg] "uninitialized_variable_warn" directive is duplicate in
n1te

คุณยังตั้งมันไว้ที่อื่นไหม? ฉันใช้uninitialized_variable_warnเป็นส่วนหนึ่งของสถานphp.confที่ที่นำเข้าเฉพาะสถานที่ที่สนับสนุน PHP ดังนั้นฉันจึงใช้เฉพาะในขอบเขตเหล่านั้นเท่านั้นในขณะที่ยังคงมีคำเตือนอยู่ทุกที่ ฉันยังไม่ได้uninitialized_variable_warnตั้งค่าขอบเขตอื่นใด (ให้เป็นค่าเริ่มต้นtrue)
Haravikk

คำตอบ:


11

ฉันใช้สิ่งต่อไปนี้เพื่อตรวจสอบว่ามีตัวแปรอยู่หรือไม่:

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

หากยังไม่ได้ตั้งค่าก่อนที่จะถึงบล็อกตำแหน่งนี้ก็จะตั้งเป็นสตริงว่าง คุณสามารถเพิ่มสตริงระหว่างเครื่องหมายคำพูดได้อย่างง่ายดาย ฉันไม่ได้รับข้อผิดพลาดใด ๆ เมื่อทำการทดสอบการกำหนดค่าโดยใช้สิ่งนี้

โปรดแจ้งให้เราทราบหากคุณเห็นเป็นอย่างอื่น


ฉันเห็น nginx: [ฉุกเฉิน] ไม่รู้จักตัวแปร "dir"
Alex Barker

การตรวจสอบที่ผิดพลาดนี้ไม่สามารถใช้งานได้อีกต่อไปโปรดใช้$foo ~ "^$"
Valdrinium

1

$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 จะแทนที่ค่าเริ่มต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.