ลำดับความสำคัญของตำแหน่ง Nginx


คำตอบ:


352

จากเอกสารโมดูล HTTP หลัก :

  1. คำสั่งที่มีคำนำหน้า "=" ที่ตรงกับคำค้นหาทั้งหมด หากพบว่าการค้นหาหยุด
  2. คำสั่งที่เหลือทั้งหมดด้วยสตริงทั่วไป หากการจับคู่นี้ใช้คำนำหน้า "^ ~" การค้นหาจะหยุด
  3. นิพจน์ทั่วไปตามลำดับที่กำหนดไว้ในไฟล์กำหนดค่า
  4. หาก # 3 ให้ผลลัพธ์การแข่งขันจะใช้ผลลัพธ์นั้น มิฉะนั้นจะใช้การจับคู่จาก # 2

ตัวอย่างจากเอกสาร:

location  = / {
  # matches the query / only.
  [ configuration A ] 
}
location  / {
  # matches any query, since all queries begin with /, but regular
  # expressions and any longer conventional blocks will be
  # matched first.
  [ configuration B ] 
}
location /documents/ {
  # matches any query beginning with /documents/ and continues searching,
  # so regular expressions will be checked. This will be matched only if
  # regular expressions don't find a match.
  [ configuration C ] 
}
location ^~ /images/ {
  # matches any query beginning with /images/ and halts searching,
  # so regular expressions will not be checked.
  [ configuration D ] 
}
location ~* \.(gif|jpg|jpeg)$ {
  # matches any request ending in gif, jpg, or jpeg. However, all
  # requests to the /images/ directory will be handled by
  # Configuration D.   
  [ configuration E ] 
}

ถ้ามันยังคงสับสนนี่คือคำอธิบายอีกต่อไป


9
ด้วยสามารถช่วยคุณได้ :) github.com/detailyang/nginx-location-match-visible
2228392

4
โปรดทราบว่าทั้งสอง/และ/documents/กฎตรงกับคำขอ/documents/index.htmlแต่กฎหลังมีความสำคัญกว่าเพราะเป็นกฎที่ยาวที่สุด
arrakis_sun

69

มันยิงตามลำดับนี้

  1. = (ตรง)

    location = /path

  2. ^~ (การแข่งขันไปข้างหน้า)

    location ^~ /path

  3. ~ (ตัวพิมพ์เล็กและใหญ่)

    location ~ /path/

  4. ~* (กรณีการแสดงออกปกติไม่รู้สึก)

    location ~* .(jpg|png|bmp)

  5. /

    location /path


3
^ ~ (การแข่งขันไปข้างหน้า) สำคัญมาก
iwind

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