ทั้งไฟล์ regex และรวมเป็นวิธีการที่ดีและฉันมักจะใช้ไฟล์เหล่านั้น แต่อีกทางเลือกหนึ่งคือใช้ "ตำแหน่งที่ตั้งชื่อ" ซึ่งเป็นวิธีการที่มีประโยชน์ในหลาย ๆ สถานการณ์โดยเฉพาะอย่างยิ่งที่ซับซ้อนกว่า หน้า"If is Evil" อย่างเป็นทางการจะแสดงสิ่งต่อไปนี้เป็นวิธีที่ดีในการทำสิ่งต่าง ๆ :
error_page 418 = @common_location;
location /first/location/ {
return 418;
}
location /second/location/ {
return 418;
}
location @common_location {
# The common configuration...
}
มีข้อดีและข้อเสียของวิธีการต่าง ๆ เหล่านี้ ข้อดีอย่างหนึ่งของ regex ก็คือคุณสามารถจับภาพบางส่วนของการแข่งขันและใช้เพื่อแก้ไขการตอบสนอง แน่นอนคุณมักจะสามารถบรรลุผลที่คล้ายกันด้วยวิธีการอื่น ๆ map
โดยการตั้งค่าตัวแปรในบล็อกเดิมหรือใช้ ข้อเสียของวิธีการ regex คือมันสามารถรับได้อย่างง่ายดายหากคุณต้องการจับคู่สถานที่ที่หลากหลายรวมถึงลำดับความสำคัญต่ำของ regexอาจไม่พอดีกับวิธีที่คุณต้องการจับคู่สถานที่ - ไม่พูดถึงว่ามีผลกระทบต่อประสิทธิภาพอย่างชัดเจน จาก regexes ในบางกรณี
ข้อได้เปรียบหลักของการรวมไฟล์ (เท่าที่ฉันสามารถบอกได้) คือมันมีความยืดหยุ่นมากกว่าเล็กน้อยเกี่ยวกับสิ่งที่คุณสามารถรวมได้ - มันไม่จำเป็นต้องเป็นตำแหน่งบล็อกแบบเต็มตัวอย่างเช่น แต่มันก็เป็นอะไรที่แปลกกว่าที่ตั้งชื่อ
นอกจากนี้โปรดทราบว่ามีวิธีแก้ไขปัญหาที่เกี่ยวข้องซึ่งคุณสามารถใช้ในสถานการณ์ที่คล้ายกัน: ตำแหน่งที่ซ้อนกัน แนวคิดคือคุณจะเริ่มต้นด้วยตำแหน่งทั่วไปใช้การกำหนดค่าบางอย่างร่วมกับการจับคู่ที่เป็นไปได้หลาย ๆ อันจากนั้นให้แยกตำแหน่งที่ซ้อนกันสำหรับเส้นทางประเภทต่างๆที่คุณต้องการจับคู่ ตัวอย่างเช่นอาจเป็นประโยชน์ในการทำสิ่งนี้:
location /specialpages/ {
# some config
location /specialpages/static/ {
try_files $uri $uri/ =404;
}
location /specialpages/dynamic/ {
proxy_pass http://127.0.0.1;
}
}