Score:1

แทนที่ค่าเดียวกันหลายครั้งด้วย nginx sub_filter

ธง in

แก้ไข: ตัวอย่างที่ทำซ้ำได้: https://github.com/searchingforlife/nginx-substitution

ฉันกำลังพยายามเพิ่ม/ใส่จำนวนสคริปต์ลงในไฟล์/เอาต์พุต HTML โดยพลการ พวกเขากรองค่าเดียวกันทั้งหมด </body> เพื่อฉีดให้ตัวเอง

รุ่น nginx: nginx/1.16.1

ลองนึกภาพว่าเรามีไฟล์ conf สองไฟล์ (แบบง่าย):

#script_one.conf

sub_filter " </body>" "<script src='/one.js'></script></body>";
#script_two.conf

sub_filter " </body>" "<script src='/two.js'></script></body>";

และไฟล์ conf nginx หลักของเรา:

สถานที่ / หนึ่ง {
  sub_filter_once ปิด;
  รวม /script_one.conf;
  รวม /script_two.conf;
}

อย่างไรก็ตามสิ่งนี้ดูเหมือนจะใช้งานไม่ได้และ nginx จะเพิ่มสคริปต์แรกเท่านั้น หากค่าตัวกรองแตกต่างกัน (เช่น เปิดตัวกรองหนึ่งตัว </head> และอื่น ๆ บน </body>) จากนั้น nginx จะแทรกสคริปต์ทั้งสอง

มีวิธีแก้ไขข้อ จำกัด นี้หรือไม่และให้ nginx แทรกสคริปต์ทั้งสองหรือไม่ ฉันรู้ว่าฉันสามารถสร้างไฟล์ conf ใหม่ที่รวมทั้งสองสคริปต์เป็นหนึ่งเดียวและรวมไว้ แต่นั่นจะไม่ปรับขนาดเมื่อคุณมีสคริปต์มากกว่า 10 สคริปต์ที่จะแทรกซึ่งสามารถรวมกันได้หลายวิธีขึ้นอยู่กับตำแหน่ง

Michael Hampton avatar
cz flag
ดังที่แสดงไว้ควรใช้งานได้ อาจมีอย่างอื่นเกิดขึ้น โปรดโพสต์ผลลัพธ์ของ `nginx -T`
searchingforlife avatar
in flag
@MichaelHampton เพิ่ม repo เพื่อทำซ้ำพฤติกรรมนี้: https://github.com/searchingforlife/nginx-substitution
mforsetti avatar
tz flag
ลองใช้ `">
Score:0
ธง in

ฉันลงเอยด้วยการคิดวิธีอื่นซึ่งเขียนซ้ำเพียงครั้งเดียว หากใครสนใจดูสาขาโซลูชัน: https://github.com/searchingforlife/nginx-substitution/tree/solution

โดยพื้นฐานแล้ว เราสร้างตัวแปรที่เก็บชื่อของสคริปต์ที่จะแทรก จากนั้นจึงแทรกทั้งหมดพร้อมกัน ด้วยวิธีนี้เราจะสิ้นสุดการเขียนใหม่เพียงครั้งเดียว

สถานที่ ~ ^/ {
  ตั้ง $js_args "หนึ่ง,สอง";
  รวม scripts.conf;
}
#scripts.conf

ถ้า ($js_args ~ "^$") {
  ตั้ง $js_args '';
}

ตั้ง $scripts "";

ถ้า ($js_args ~* "(,|^)หนึ่ง([,]|$)") {
  ตั้ง $scripts "${scripts}<script src='/one.js'></script>";
}

ถ้า ($js_args ~* "(,|^)สอง([,]|$)") {
  ตั้ง $scripts "${scripts}<script src='/two.js'></script>";
}

sub_filter "</body>" "${scripts}</body>";
Score:0
ธง us

นี่เป็นการเก็งกำไร ฉันยังไม่ได้ยืนยันจากซอร์สโค้ด nginx ฉันถือว่า nginx เก็บคีย์เพื่อแทนที่ในโครงสร้างแฮช นั่นคือแทนที่ x กับ .

ตอนนี้ เมื่อ nginx อ่านไฟล์คอนฟิกูเรชันตามลำดับ สิ่งแรกที่ต้องทำคือเพิ่มคีย์ </body> ไปยังแผนที่แทนที่ แล้วแทนที่ด้วยอันที่สอง

searchingforlife avatar
in flag
คุณน่าจะใช่แต่ฉันคิดถึงวิธีการอื่นที่ดูเหมือนจะแก้ปัญหานี้ซึ่งเราเขียนซ้ำเพียงครั้งเดียว หากใครสนใจดูสาขาโซลูชัน: https://github.com/searchingforlife/nginx-substitution/tree/solution

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา