Apache-2.2

為什麼訪問 index.html 時 lighttpd 或 Apache2 代理會更改我的 URL?

  • January 13, 2013

我有一個有點尷尬的設置,將 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 /gamegame文件夾中有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>

引用自:https://serverfault.com/questions/466614