Điểm:0

URL Lighttpd và kết hợp máy chủ và kéo dài tệp bao gồm (có khả thi không?)

lá cờ pk

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.

Điểm:0
lá cờ cn

Một giải pháp cấu hình khả thi là đặt cấu hình được chia sẻ của bạn sau đó các $HTTP["máy chủ"] điều kiện và trong trường hợp của bạn, để ghi đè lên cấu hình proxy

$HTTP["url"] =~ "^/topdir/subir/" {
    server.document-root = "/www/sharedstuff"
    proxy.server = ()
}

Một giải pháp khác, linh hoạt và mạnh mẽ hơn: lighttpd mod_magnet cho phép bạn viết logic phức tạp tùy ý trong một vài dòng lua. Bạn có thể yêu cầu cấu hình "được chia sẻ" của mình xử lý một số yêu cầu nhất định (trong tập lệnh lua tùy chỉnh của bạn) trước lighttpd mod_proxy.

BTW, giải pháp ngây thơ sau đây có hoạt động không? Cấu hình chia sẻ:

$HTTP["url"] =~ "^/topdir/subir/" {
    server.document-root = "/www/sharedstuff"
}

trong shared.conf bao gồm trong lighttpd.conf như

bao gồm "/etc/lighthttpd/conf.d/shared.conf" # chứa ràng buộc `$HTTP["url"]`
khác {
    bao gồm "/etc/lighttpd/conf.d/distributed.conf" # chứa ràng buộc `$HTTP["host"]`
}
Bernd Wechner avatar
lá cờ pk
Cảm ơn, mod_magnet luôn là một tùy chọn, mặc dù tôi có xu hướng ngần ngại sử dụng nó cho đến khi bị dồn vào chân tường. Và đưa ra dự phòng ở đây chỉ đơn giản là giữ cả hai cấu hình trong một tệp (không lý tưởng nhưng có thể hoạt động được) Tôi không cảm thấy cần phải thử mod_magnet ở đây. Đó là một dự phòng tuyệt vời cho các nhu cầu rất cụ thể mặc dù có.
Bernd Wechner avatar
lá cờ pk
Tuy nhiên, để làm rõ gợi ý đầu tiên, nó có vẻ thú vị và đáng ngạc nhiên đối với tôi. Nhưng có phải trường hợp nếu thử nghiệm `$HTTP["url"]` được thực hiện sau `$HTTP["host"]` mà không có `else` thì nó sẽ khớp và đặt lại `proxy.server` thành ` ()` sau khi được đặt trong phần `$HTTP["host"]`? Bài học quan trọng là nếu không có `else` thì tất cả các điều kiện phù hợp đều được sử dụng và những điều kiện sau này có thể thay đổi các cài đặt trước đó? Chà, ít nhất là `proxy.server`? Một cái nhìn sâu sắc tuyệt vời nếu vậy, cảm ơn!
lá cờ cn
@BerndWechner rằng "cái nhìn sâu sắc tuyệt vời" được ghi lại: [Sáp nhập cấu hình có điều kiện lighttpd](https://wiki.lighttpd.net/Docs_Configuration#Conditional-Configuration-Merging)
Bernd Wechner avatar
lá cờ pk
Tài liệu đôi khi cung cấp những hiểu biết sâu sắc thực sự. Mặc dù tôi đọc tài liệu thường xuyên và lần đầu tiên khi gặp khó khăn, nhưng chắc chắn không phải lúc nào người ta cũng tìm thấy thứ mình đang tìm kiếm. Nhưng cảm ơn rất nhiều về mẹo và con trỏ tài liệu, đánh giá rất cao!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.