การแยกสายยาวในไฟล์กำหนดค่า nginx


15

เพื่อที่จะไม่ส่งผ่านขยะไปยังส่วนหลังฉันมี regex ที่เข้มงวดสำหรับlocationคำสั่ง ดูเหมือนว่านี้:

location ^~ "/(some|stuff|more|bar|etc(-testing)?)/[a-zA-Z0-9]+/...(more|restrict).ext {
    # other directives
}

ฉันต้องการพับบรรทัดที่ 80 ตัวอักษรมีวิธีแยกการกำหนดค่าหรือไม่ ผลลัพธ์ต่อไปนี้มีข้อผิดพลาดทางไวยากรณ์ แต่เป็นสิ่งที่ฉันกำลังมองหา:

location ^~ "/(some|stuff|more|bar|etc(-testing)?)/[a-zA-Z0-9]+/"\
            "...(more|restrict).ext" {
# results in a literal newline (%0A) being accepted
location ^~ "/(some|stuff|more|bar|etc(-testing)?)/[a-zA-Z0-9]+/
...(more|restrict).ext" {

ฉันไม่พบคำแนะนำในเอกสาร ( http://wiki.nginx.org/ConfigNotationหรือhttp://wiki.nginx.org/HttpCoreModule#locationพูดถึงสิ่งใดเกี่ยวกับเส้นพับ)


คุณสามารถสร้างสตริงของคุณจากหลาย ๆ แฟรกเมนต์ที่สอดแทรกได้หรือไม่? (ฉันไม่มีความคิด)
bsb

@bsb คุณไม่สามารถใช้ตัวแปรในนิพจน์ตำแหน่งดังนั้นไม่คุณไม่สามารถตั้งค่าตัวแปรและใช้การแก้ไขสตริง
Lekensteyn

คำตอบ:


7

ฉันไม่คิดว่าคุณสามารถทำได้

nginx ปฏิบัติช่องว่างทั้งหมดอย่างเท่าเทียมกันดังนั้นแม้ว่าคุณจะพยายามแยกสตริงของคุณเช่นนั้นและ nginx สามารถแยกวิเคราะห์ในแบบที่คุณต้องการคุณจะต้องจบด้วย regex ที่มีช่องว่างอยู่ในนั้นซึ่งฉันแน่ใจว่าไม่ใช่ สิ่งที่คุณต้องการ หาก nginx ไม่สามารถแยกวิเคราะห์ซึ่งมีโอกาสมากขึ้นคุณจะได้รับข้อผิดพลาดทางไวยากรณ์

คุณแค่ต้องอยู่กับเส้นยาวสองสามเส้นหรือแสดงความซับซ้อนน้อยกว่าปกติ


ถ้าไม่มีช่องว่างชั้นนำฉันก็สามารถอยู่กับมันได้ แต่ดูเหมือนจะมีการตีความบรรทัดใหม่อย่างแท้จริงเช่นกัน
Lekensteyn

มันไม่ได้เป็นจุดสิ้นสุดของโลก :)
Michael Hampton

1
สำหรับตอนนี้ฉันติดอยู่กับlocation ".../[a-zA-Z0-9_...-]+$"ลวดลายตามมาด้วยอีกlocation ~ "\.pkg\.tar\.xz$"ด้านใน ขอขอบคุณสำหรับคำตอบของคุณหวังว่าสักวันจะมีคำตอบที่ดีกว่าปรากฏขึ้น)
Lekensteyn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.