我似乎无法将 URL 代理到同一主机名上的另一个端口。我的用户界面 (Angular 5) 在 somehost:8080 上运行,其余 Web 应用程序在 somehost.com(端口 80)上运行。我想代理http://somehost.com/xxx到http://somehost.com:8080。不确定我的配置是否正确或是否在正确的位置。
$HTTP["host"] =~ "somehost\.com$" {
$HTTP["url"] =~ "(^/xxx/)" {
proxy.server = ( "" => ("" => ( "host" => "somehost.com", "port" => 8080 )))
}
url.rewrite-if-not-file = (
"^/(.*)" => "/index.php/$1",
)
}
答案1
从你的问题来看,你似乎想要http://somehost.com/xxx/file
从提供服务http://somehost.com:8080/file
。在这种情况下,你的配置是错误的,因为它试图提供服务http://somehost.com:8080/xxx/file
。你需要添加一个url.rewrite-once
:
url.rewrite-once = ( "^/xxx/(.*)$" => "/$1" )
proxy.server = ( "" => ( # proxy all file extensions / prefixes
"" => # optional label to identify requests in logs
( "host" => "somehost",
"port" => 8080
)
)
)
根据您的 lighttpd 版本,您可能能够或无法在 $HTTP["url"] 匹配中调用 url.rewrite-once。
另外请确保您已经加载了 mod_proxy 和 mod_rewrite 模块:
server.modules += ( "mod_proxy" )
server.modules += ("mod_rewrite")
有关 proxy.server 的更多信息:https://redmine.lighttpd.net/projects/1/wiki/Docs_ModProxy 有关url.rewrite-once的更多信息:https://redmine.lighttpd.net/projects/1/wiki/docs_modrewrite#urlrewrite-repeat