Tôi có một vấn đề giải quyết tình trạng thú vị cần giải quyết và chưa gặp may mắn khi tìm kiếm trực tuyến và xem qua tài liệu về lighttpd. Nhiều trong số những tìm kiếm đó đã dẫn đến những câu hỏi tương tự được hỏi ở đây và những câu trả lời hữu ích (đối với những câu hỏi đó, vì vậy hãy xem câu hỏi này chạy như thế nào:
Tôi có lighttpd chạy trên bộ định tuyến cổng (OpenWRT, Hoặc Turris OS nếu bạn thích nó là Turris Omnia) và nó có một số miền chỉ đường mà nó phát triển, như một proxy đảo ngược cho các máy chủ ở phía mạng LAN của nó cổng vào.
Cấu hình chung, ở dạng pro forma, như:
$HTTP["máy chủ"] =~ "(a.com|b.com|c.com)$" {
proxy.server = ( "" => ( ( "máy chủ" => "..." ) ) )
...
} khác $HTTP["host"] =~ "(d.org|e.org)$" {
proxy.server = ( "" => ( ( "máy chủ" => "..." ) ) )
...
} khác $HTTP["host"] =~ "(f.net|g.net)$" {
proxy.server = ( "" => ( ( "máy chủ" => "..." ) ) )
...
}
Điều đó đã được thực hiện một giấc mơ cho các lứa tuổi.
Bây giờ tôi muốn một đường dẫn cụ thể, chung cho tất cả các trang web này sẽ được phục vụ trực tiếp từ bộ định tuyến này.
Trong hình thức chuyên nghiệp một lần nữa:
$HTTP["url"] =~ "^/topdir/subir/" {
server.document-root = "/www/sharedstuff"
}
Và tôi có thể kết hợp điều này một cách đáng ngưỡng mộ như sau (và nó hoạt động):
$HTTP["url"] =~ "^/topdir/subir/" {
server.document-root = "/www/sharedstuff"
} khác {
$HTTP["máy chủ"] =~ "(a.com|b.com|c.com)$" {
proxy.server = ( "" => ( ( "máy chủ" => "..." ) ) )
...
} khác $HTTP["host"] =~ "(d.org|e.org)$" {
proxy.server = ( "" => ( ( "máy chủ" => "..." ) ) )
...
} khác $HTTP["host"] =~ "(f.net|g.net)$" {
proxy.server = ( "" => ( ( "máy chủ" => "..." ) ) )
...
}
}
Ngọt.
NHƯNG, đây là vấn đề tôi đang cố giải quyết. Tôi muốn lý tưởng để gói gọn $HTTP["url"]
điều kiện trong một tập tin bao gồm và $HTTP["máy chủ"]
điều kiện khác để tôi có thể:
bao gồm "/etc/lighttpd/conf.d/shared.conf" # chứa ràng buộc `$HTTP["url"]`
bao gồm "/etc/lighttpd/conf.d/distributed.conf" # chứa ràng buộc `$HTTP["host"]`
Tôi tự hỏi nếu tôi hy vọng quá nhiều ở đây. Vì tôi không thể nghĩ hoặc tìm ra cách để làm điều đó.
tôi tưởng tượng nếu đã chia sẻ.conf
chứa một số câu lệnh sao cho tồn tại câu lệnh cấu hình như:
$HTTP["url"] =~ "^/topdir/subir/" {
server.document-root = "/www/sharedstuff"
bỏ qua-tất cả-tiếp theo-host-khớp-điều kiện
}
Một ý tưởng sáng tạo khác, nếu ngây thơ và bất khả thi, là nếu chúng ta có thể viết lại $HTTP["máy chủ"]
giống như:
$HTTP["máy chủ"] = "null.net"
Vì vậy, các trận đấu tiếp theo như $HTTP["máy chủ"] =~ "(a.com|b.com|c.com)$"
tất cả đều không thành công và yêu cầu vẫn ở trạng thái cục bộ.
Dưới đây là một số tùy chọn được khám phá cho đến nay:
Biến máy chủ
Không đi vì chúng được đánh giá khi cấu hình được tải chứ không phải khi yêu cầu được xử lý.
https://redmine.lighttpd.net/projects/1/wiki/docs_configuration#Using-variables
Tiêu đề yêu cầu
setenv.add-request-header
trông hấp dẫn:
https://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModSetEnv
Nếu trong đã chia sẻ.conf
chúng tôi đặt tiêu đề yêu cầu tùy chỉnh có lẽ chúng tôi có thể kiểm tra tiêu đề đó bằng một $REQUEST_HEADER["tiêu đề"]
Trong phân phối.conf
:
https://redmine.lighttpd.net/projects/1/wiki/docs_configuration#Conditional-Configuration
Nhưng tôi đã không có bất kỳ thành công với điều đó. Có vẻ như một điều kiện như thế này:
$REQUEST_HEADER["my_header"] == "value_I_set" {
# Không hoạt động như một proxy ngược
} khác $HTTP["máy chủ"] =~ "(a.com|b.com|c.com)$" {
proxy.server = ( "" => ( ( "máy chủ" => "..." ) ) )
...
} khác $HTTP["host"] =~ "(d.org|e.org)$" {
proxy.server = ( "" => ( ( "máy chủ" => "..." ) ) )
...
} khác $HTTP["host"] =~ "(f.net|g.net)$" {
proxy.server = ( "" => ( ( "máy chủ" => "..." ) ) )
...
}
Đơn giản là không hoạt động, và tôi thực sự không thể hiểu tại sao.Thật khó để biết điều gì đang xảy ra nhưng nếu tôi ghi nhật ký đầu ra khi xử lý có điều kiện thì có vẻ như vậy $REQUEST_HEADER["my_header"]
luôn trống ngay cả đối với một URL trong đó đã chia sẻ.conf
điều này phù hợp:
$HTTP["url"] =~ "^/topdir/subir/" {
setenv.add-request-header = ("my_header" => "value_I_set")
}
Có vẻ như điều kiện không kiểm tra các tiêu đề yêu cầu do setenv đặt, giống như những tiêu đề được gửi.