Apache-2.2
為什麼訪問 index.html 時 lighttpd 或 Apache2 代理會更改我的 URL?
我有一個有點尷尬的設置,將 Apache 2 網路伺服器作為網守並根據傳入域代理流量:
<VirtualHost *:80> ServerName example.org RewriteEngine On RewriteRule ^/(.*) http://localhost:3000/$1 [P] </VirtualHost>
在
localhost:3000
我執行的 lighttpd 下執行,它提供靜態內容並充當其他兩個服務的反向代理,在埠 3001 和 3002 上執行。配置如下所示:# lighttpd will also be used to forward requests to node.js server.modules = ( "mod_proxy" ) # This config is meant to work relative to certain directories, # it is not meant to be used somewhere globally in /etc/ var.projectRoot = var.CWD # Setting up paths server.document-root = var.projectRoot + "/client" # Port to listen on server.port = 3000 # We don't want to provide names of individual files index-file.names = ( "index.html" ) # Serve all API calls to the API server $HTTP["url"] =~ "^/api/.*$" { proxy.server = ( "" => ( ( "host" => "127.0.0.1", "port" => 3001 ) ) ) } # Serve all pages that are not known as static or api routes # to the page instance $HTTP["url"] !~ "^/(assets|game|ige|api).*$" { proxy.server = ( "" => ( ( "host" => "127.0.0.1", "port" => 3002 ) ) ) }
整個設置適用於以下情況:
GET /assets/textures/sources.txt
提供client
目錄中的靜態文件。GET /api/games/byId/123
從埠 3001 上的 API 伺服器檢索正確的數據GET /
從埠 3002 檢索頁面但是,請求
GET /game
(game
文件夾中有index.html
文件)確實得到了服務,但將 URL 更改為http://localhost:3000/game
. 或者更準確地說:它更改為我在 Apache2 vhost 中指定的任何 URL,如果我放在example.org:3000
那裡,它將嘗試服務example.org:3000/game
,忽略$$ P $$代理指令。 只有當 lighttpds “重寫”以傳遞請求文件時,事情才會出錯。誰能告訴我為什麼?
folder/index.html``folder/
Chrome 和 Firefox 的行為是相同的,我沒有收到任何 HTTP 重定向。
它可能是 lighttpd 伺服器的一些重定向,因為您沒有
ProxyPassReverse
指定指令(它也適用RewriteRule
)。也就是說,我沒有看到任何關於您的配置特別需要 mod_rewrite 來執行此代理的內容:當有專門的指令來完成這項工作時,最好避免使用它。你介意試試這個嗎?
<Location /> ProxyPass http://localhost:3000 ProxyPassReverse http://localhost:3000 </Location>