ฉันมีปัญหาการแก้ไขเงื่อนไขที่น่าสนใจที่ต้องแก้ไข และยังไม่มีโชคในการค้นหาออนไลน์และดูเอกสารประกอบสำหรับ lighttpd เลย การค้นหาจำนวนมากนำไปสู่คำถามที่คล้ายกันซึ่งถามที่นี่และคำตอบที่เป็นประโยชน์ (สำหรับคำถามเหล่านั้น มาดูกันว่าคำถามนี้ทำงานอย่างไร:
ฉันมี lighttpd ที่ทำงานบนเราเตอร์เกตเวย์ (OpenWRT หรือ Turris OS หากคุณต้องการเพราะมันเป็น Turris Omnia) และมีโดเมนจำนวนหนึ่งที่ชี้ทางที่มันทำฟาร์มออกมา เป็นพร็อกซีย้อนกลับไปยังเซิร์ฟเวอร์บนฝั่ง LAN ของสิ่งนั้น ประตู.
การกำหนดค่าทั่วไปในรูปแบบ pro เช่น:
$HTTP["โฮสต์"] =~ "(a.com|b.com|c.com)$" {
proxy.server = ( "" => ( ( "โฮสต์" => "..." ) ) )
...
} อื่น $HTTP["โฮสต์"] =~ "(d.org|e.org)$" {
proxy.server = ( "" => ( ( "โฮสต์" => "..." ) ) )
...
} อื่น $HTTP["host"] =~ "(f.net|g.net)$" {
proxy.server = ( "" => ( ( "โฮสต์" => "..." ) ) )
...
}
ที่ได้ทำงานในฝันมานาน
ตอนนี้ฉันต้องการเส้นทางเฉพาะซึ่งเป็นเส้นทางทั่วไปสำหรับไซต์เหล่านี้ทั้งหมดที่จะให้บริการจากเราเตอร์นี้โดยตรง
ในรูปแบบ Pro อีกครั้ง:
$HTTP["url"] =~ "^/topdir/subir/" {
server.document-root = "/www/sharedstuff"
}
และฉันสามารถรวมสิ่งนี้ได้อย่างน่าชื่นชมดังต่อไปนี้ (และใช้งานได้):
$HTTP["url"] =~ "^/topdir/subir/" {
server.document-root = "/www/sharedstuff"
} อื่น {
$HTTP["โฮสต์"] =~ "(a.com|b.com|c.com)$" {
proxy.server = ( "" => ( ( "โฮสต์" => "..." ) ) )
...
} อื่น $HTTP["โฮสต์"] =~ "(d.org|e.org)$" {
proxy.server = ( "" => ( ( "โฮสต์" => "..." ) ) )
...
} อื่น $HTTP["host"] =~ "(f.net|g.net)$" {
proxy.server = ( "" => ( ( "โฮสต์" => "..." ) ) )
...
}
}
หวาน.
แต่นี่คือปัญหาที่ฉันพยายามแก้ไข ฉันต้องการสรุปการ $HTTP["url"]
สภาพรวมในไฟล์เดียวและ $HTTP["โฮสต์"]
เงื่อนไขอื่นที่ฉันสามารถ:
รวม "/etc/lighttpd/conf.d/shared.conf" # มีข้อจำกัด `$HTTP["url"]
รวม "/etc/lighttpd/conf.d/distributed.conf" # มีข้อจำกัด `$HTTP["host"]
สงสัยจะหวังมากไปหรือเปล่านี่ เพราะคิดหรือหาวิธีไม่ได้
ฉันจินตนาการว่าถ้า แชร์.conf
มีคำสั่งบางอย่างที่มีคำสั่ง config เช่น:
$HTTP["url"] =~ "^/topdir/subir/" {
server.document-root = "/www/sharedstuff"
ละเว้นเงื่อนไขการจับคู่โฮสต์ที่ตามมาทั้งหมด
}
อีกแนวคิดที่สร้างสรรค์ หากไร้เดียงสาและเป็นไปไม่ได้ ก็คือถ้าเราสามารถเขียนใหม่ได้ $HTTP["โฮสต์"]
คล้ายกับ:
$HTTP["host"] = "null.net"
ดังนั้นการแข่งขันที่ตามมาเช่น $HTTP["โฮสต์"] =~ "(a.com|b.com|c.com)$"
ทั้งหมดล้มเหลว และคำขอยังคงอยู่ในเครื่อง
นี่คือตัวเลือกบางส่วนที่สำรวจแล้ว:
ตัวแปรเซิร์ฟเวอร์
ไม่ไป เนื่องจากสิ่งเหล่านี้ได้รับการประเมินเมื่อโหลดการกำหนดค่า ไม่ใช่เมื่อคำขอได้รับการประมวลผล
https://redmine.lighttpd.net/projects/1/wiki/docs_configuration#Using-variables
ส่วนหัวของคำขอ
setenv.add-request-header
ดูน่าสนใจ:
https://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModSetEnv
ถ้าใน แชร์.conf
เราตั้งค่าส่วนหัวของคำขอที่กำหนดเอง บางทีเราอาจทดสอบด้วย $REQUEST_HEADER["ส่วนหัว"]
ใน กระจาย.conf
:
https://redmine.lighttpd.net/projects/1/wiki/docs_configuration#Conditional-Configuration
แต่ฉันยังไม่ประสบความสำเร็จกับสิ่งนั้น ดูเหมือนว่าจะมีเงื่อนไขดังนี้:
$REQUEST_HEADER["my_header"] == "value_I_set" {
#อย่าทำตัวเป็นผู้รับมอบฉันทะย้อนกลับ
} อื่น $HTTP["โฮสต์"] =~ "(a.com|b.com|c.com)$" {
proxy.server = ( "" => ( ( "โฮสต์" => "..." ) ) )
...
} อื่น $HTTP["โฮสต์"] =~ "(d.org|e.org)$" {
proxy.server = ( "" => ( ( "โฮสต์" => "..." ) ) )
...
} อื่น $HTTP["host"] =~ "(f.net|g.net)$" {
proxy.server = ( "" => ( ( "โฮสต์" => "..." ) ) )
...
}
ไม่ได้ผลและฉันไม่สามารถอธิบายได้ว่าทำไมมันยากที่จะดูว่าเกิดอะไรขึ้น แต่ถ้าฉันบันทึกผลลัพธ์ในการจัดการตามเงื่อนไข ดูเหมือนว่าจะเป็นอย่างนั้น $REQUEST_HEADER["my_header"]
จะเว้นว่างไว้เสมอแม้สำหรับ URL ที่อยู่ใน แชร์.conf
สิ่งนี้ตรงกัน:
$HTTP["url"] =~ "^/topdir/subir/" {
setenv.add-request-header = ("my_header" => "value_I_set")
}
ดูเหมือนว่าเงื่อนไขจะไม่ทดสอบส่วนหัวคำขอที่กำหนดโดย setenv มากเท่ากับที่จัดส่ง