2011-02-01 44 views
12

DeviceA đóng vai trò như một reverse-proxy và có nghĩa vụ phải chuyển tiếp yêu cầu như sau:lighttpd như đảo ngược-proxy

192.168.1.10/DeviceB ==> 192.168.1.20/index.html

192.168.1.10/DeviceC ==> 192.168.1.30/index.html

Cả hai tệp chỉ mục đều nằm trong/var/www và tĩnh "Xin chào thế giới!" các trang. Vấn đề là tôi không thể truy cập các tập tin đó thông qua DeviceA, nhưng nếu tôi gọi một dịch vụ thử nghiệm cũng chạy trên DeviceC (nghe trên cổng 12345) mọi thứ hoạt động tốt.

Tôi sai khi nói rằng máy chủ web trên DeviceB, DeviceC sẽ phản hồi với index.html nếu một yêu cầu đến trên cổng 80 ???

lighttpd.conf DeviceA @ 192.168.1.10 server.modules = ("mod_proxy")

proxy.server = ( 
"/DeviceB" => ("" => ("host" => "192.168.1.20", "port" => 80)), 
"/DeviceC" => ("" => ("host" => "192.168.1.30", "port" => 80)), 
"/TestService" => ("" => ("host" => "192.168.1.30", "port" => 12345)) 
) 

lighttpd.conf DeviceB @ 192.168.1.20

server.document-root = "/var/www" 
server.port = 80 
index-file.names = ("index.html") 

lighttpd .conf DeviceC @ 192.168.1.30

server.document-root = "/var/www" 
server.port = 80 
index-file.names = ("index.html") 

Cập nhật

Tôi có cần $ HTTP [ "host"] == ... xung quanh proxy.server() để viết lại/URL chuyển hướng? Hoặc, làm thế nào để xác định những gì sẽ proxy (ed)

+5

nên được trên serverfault, không SO –

+0

các câu hỏi ở đây là gì? Tôi đã không có vấn đề với Lighttpd, nhưng tôi thấy rất nhiều thiết lập và không có câu hỏi thực sự (ít nhất là có ý nghĩa cho việc thiết lập) ...? – ircmaxell

+0

Câu hỏi đặt ra là cách thiết lập proxy.server() để chuyển tiếp 192.168.1.10/DeviceB yêu cầu tới 192.168.1.20/index.html – impf

Trả lời

6

buộc gói

server.modules = (
... 
    "mod_proxy", 
... 
) 

bạn thiết lập Proxy frontend: cho lighttpd.conf @ 192.168.1.10

$HTTP["url"] =~ "^.*DeviceB" { 
    proxy.server = ("" => 
     (("host" => "192.168.1.20", "port" => 80)) 
    ) 
} 

$HTTP["url"] =~ "^.*DeviceC" { 
    proxy.server = ("" => 
     (("host" => "192.168.1.30", "port" => 80)) 
    ) 
} 

Đối tài liệu đầy đủ của lighttpd mod_proxy, bạn có thể tham khảo http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModProxy

10

nhu cầu của bạn được biết đến bởi các nhà phát triển lighttpd từ vài năm.

Nó được trả lời bằng cách giải quyết sự cố hoặc tính năng mới tùy thuộc vào phiên bản.

Lighttpd 1,4

Một workaround được giải thích trong bugtracker: bug #164

$HTTP["url"] =~ "(^/DeviceB/)" { 
    proxy.server = ("" => ("" => ("host" => "127.0.0.1", "port" => 81))) 
} 

$SERVER["socket"] == ":81" { 
    url.rewrite-once = ("^/DeviceB/(.*)$" => "/$1") 
    proxy.server = ("" => ("" => ("host" => "192.168.1.20", "port" => 80))) 
} 

Lighttpd 1.5

Họ nói thêm tính năng này với lệnh này (official documentation):

proxy-core.rewrite-yêu cầu: viết lại tiêu đề yêu cầu hoặc yêu cầu uri.

$HTTP["url"] =~ "^/DeviceB" { 
    proxy-co... 

    proxy-core.rewrite-request = (
    "_uri" => ("^/DeviceB/?(.*)" => "/$1"), 
    "Host" => (".*" => "192.168.1.20"), 
) 
} 
Các vấn đề liên quan