วิธีป้องกัน nginx จากไดเรกทอรีย่อยที่ระบุเฉพาะของพร็อกซีย้อนกลับ


11

ใน Apache คุณสามารถใช้ ProxyPass ได้ทุกอย่างยกเว้นไดเรกทอรีย่อยอย่างน้อยหนึ่งไดเรกทอรี (ด้วย "!")

    ProxyPass /subdir !
    ProxyPass / http://localhost:9999/

Nginx เทียบเท่าคืออะไร?

เห็นได้ชัดว่าการเดาครั้งแรกของฉันไม่ทำงาน:

 location /subdir {
      root /var/www/site/subdir;
  }

 location / {
      proxy_pass http://localhost:9999/ ;
  }

คำตอบ:


11

คุณสามารถผูก proxy_pass กับเส้นทางที่คุณต้องการได้อย่างนี้

location = / {
    proxy_pass http://localhost:9999/;
}

ทำให้แน่ใจว่าจะไม่มีเส้นทางอื่นผ่าน /

หรือ

คุณสามารถใช้ไวยากรณ์นี้เพื่อจับคู่ไดเรกทอรีย่อยเท่านั้น

location ^~ /subdir {
     alias /var/www/site/subdir;
}

location / {
    proxy_pass http://localhost:9999/ ;
}

^~ตรง subdir แล้วหยุดการค้นหาเพื่อ/จะไม่ต้องถูกประหารชีวิต มันอธิบายที่นี่


root / var / www / site / subdir ควรเป็น root / var / www / site ในกรณีของฉันมิฉะนั้น nginx จะพยายามเข้าถึง / var / www / site / subdir / subdir
Tinus

คุณพูดถูก อาจเป็นได้ว่าหรือคุณสามารถใช้aliasแทนroot
Christopher Perrin

1
คุณช่วยอธิบาย^~เพิ่มเติมได้ไหม? ฉันไม่สามารถรับสิ่งที่มันทำ ฉันลองอ่านลิงค์ที่คุณส่ง แต่ก็ยังหาไม่ได้ หากตำแหน่งคำนำหน้าการจับคู่ที่ยาวที่สุดมีตัวปรับ“ ^ ~” การแสดงออกปกติจะไม่ถูกตรวจ
Mohammed Noureldin

@MohammedNoureldin เป็นหลักหมายความว่าพยายามจับคู่คำนำหน้าบนเส้นทางและไม่ประเมินนิพจน์ทั่วไป
Christopher Perrin

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