at-sign“ @” หมายถึงอะไรในบล็อกตำแหน่ง nginx


20

ฉันพบคำถามสองสามข้อและคำตอบที่นี่ที่ใช้ไวยากรณ์นี้:

location @default {
  # ...
}

location /somewhere {
    try_files $uri @default;
}

ฉันได้ค้นหาสูงและต่ำบน Googles และฉันไม่สามารถหาเอกสารใด ๆ ของมัน มันหมายถึงอะไรและมีประโยชน์อะไรบ้าง? มันคือการประกาศตัวแปรและการกำหนดบางอย่าง? ขออภัยสำหรับคำถามที่สมัครใหม่

คำตอบ:


10

คำตอบคือในเอกสารอย่างเป็นทางการ

คำนำหน้า“ @” กำหนดตำแหน่งที่ตั้งที่มีชื่อ ตำแหน่งดังกล่าวไม่ได้ใช้สำหรับการประมวลผลคำขอปกติ แต่ใช้สำหรับเปลี่ยนเส้นทางคำขอแทน ไม่สามารถซ้อนกันได้และไม่สามารถมีตำแหน่งซ้อนกันได้


37
ตามคำอธิบายแล้วสิ่งนี้จะไม่พูดอะไรเลย
Stefano Borini

ดังนั้นสิ่งนี้จึงไม่ต่างไปกว่าการมีบล็อกปกติที่มีอยู่ในบล็อก
James

14

ในตัวอย่างที่คุณอ้างอิงในคำถามของคุณ:

location @default {
  # ...
}

location /somewhere {
  try_files $uri @default;
}

หากได้รับคำขอเข้ามาที่http: // your-domain / ที่ใดที่หนึ่งตำแหน่งนั้นจะตรงกับ / ที่ใดที่หนึ่งและจะพยายามตามลำดับสองแห่งเพื่อค้นหาการตอบสนองตามที่ระบุโดยคำสั่ง try_files ตอบสนองด้วยความพยายามครั้งแรก

  1. ก่อนอื่นจะทดสอบว่ามีไฟล์อยู่ที่ตำแหน่ง / ที่ใดที่หนึ่งหรือไม่และหากไฟล์นั้นมีอยู่ไฟล์นั้นจะถูกส่งคืนในการตอบกลับ
  2. หากไม่พยายาม try_files สำรองตัวเลือก, @default ซึ่งเรียกว่าnamed_location การตอบสนองสำหรับnamed_locationนี้ถูกระบุโดยlocation @defaultคำสั่ง named_locationจะไม่ตรงกับคำขอเข้ามาและถูกใช้โดยการอ้างอิงเพื่อระบุการตอบสนองในแนวทางของตำแหน่งอื่น ๆ

ด้วยวิธีนี้คำสั่งifสามารถหลีกเลี่ยงได้ (หากไฟล์มีอยู่ให้ใช้มันมิฉะนั้นจะตอบกลับตามข้อกำหนดใน location @default directive) ดังนั้นจึงสามารถใช้เป็นชวเลขสำหรับเงื่อนไข if คำสั่ง "ถ้า" เป็น "ขมวดคิ้วอย่างแน่นอน" โดยผู้เขียน nginx ( ถ้าเป็นคนชั่ว ) เพราะพวกเขามีข้อ จำกัด บางอย่างและอาจไม่ให้ผลลัพธ์ที่คาดหวัง

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