web-dev-qa-db-ja.com

リバースプロキシとしてのlighttpd

DeviceAはリバースプロキシとして機能し、次のようにリクエストを転送することになっています。

192.168.1.10/DeviceB ==> 192.168.1.20/index.html

192.168.1.10/DeviceC ==> 192.168.1.30/index.html

両方のインデックスファイルは/ var/wwwの下にあり、静的な「Helloworld!」です。ページ。問題は、DeviceAを介してこれらのファイルにアクセスできないことですが、DeviceC(ポート12345でリッスン)でも実行されているテストサービスを呼び出すと、すべて正常に機能します。

リクエストがポート80で受信された場合、DeviceB、DeviceCのWebサーバーはindex.htmlで応答する必要があると言っているのは間違っていますか?

lighttpd.conf DeviceA @ 192.168.1.10server.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" )

更新

URLを書き換え/リダイレクトするためにproxy.server()の周りに$ HTTP ["Host"] == ...が必要ですか?または、何をプロキシするかを定義する方法

15
impf

あなたの必要性は、lighttpd開発者によって数年から知られています。

バージョンに応じて、回避策または新機能によって回答されます。

lighttpd 1.4

回避策はバグトラッカーで説明されています: 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

彼らはこのコマンドでこの機能を追加しました( 公式ドキュメント ):

proxy-core.rewrite-request:リクエストヘッダーまたはリクエストURIを書き換えます。

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

  proxy-core.rewrite-request = (
    "_uri" => ( "^/DeviceB/?(.*)" => "/$1" ),
    "Host" => ( ".*" => "192.168.1.20" ),
  )
}
13
AizeLauna

必要なパッケージ

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

フロントエンドプロキシ設定: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 ))
    )
}

Lighttpd mod_proxyの完全なドキュメントについては、 http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModProxy を参照してください。

6
PicoCreator