Apache-2.2

執行 VPN 的本地伺服器的 Apache mod 代理

  • March 26, 2014

我有一個執行 Apache 的開放伺服器和一個也執行 Apache 的封閉伺服器,它位於防火牆後面並執行 VPN。

我正在嘗試使用開放伺服器將請求從子域轉發到封閉伺服器。 subdomain.request.com -> open server -> closest server

我的理解是,這可以使用 Apache 的 mod 代理來實現,但我在設置它時遇到了困難。我可以請求首頁,但所有其他頁面都會產生DNS lookup failure錯誤。

虛擬主機

<VirtualHost *:80> ServerName subdomain.request.com ProxyPass / http://10.0.0.54:8080 ProxyPassReverse / http://10.0.0.54:8080 ProxyPassMatch ^/(.*)$ http://10.0.0.54:8080/$1i </VirtualHost>

Garreth 幾乎是正確的,但你必須反其道而行之:

<VirtualHost *:80>
ServerName subdomain.request.com
RewriteEngine On
ProxyPreserveHost On
RewriteRule ^/(.*)$ http://10.0.0.54:8080/$1 [P,QSA,L]
</VirtualHost>

這樣,位於 10.0.0.54 的伺服器將收到原始的“主機:”標頭(又名:subdomain.request.com,而不是 10.0.0.54),並且由於位於 10.0.0.54 的伺服器可能正在基於此標頭創建連結,因此這可能解決你的問題。

我的猜測是,您遇到的錯誤不是 dns 錯誤,而是網路錯誤,因為通過您的設置,伺服器會生成如下所示的 url:http://10.0.0.54... 並且這些 url 無法從 Internet 訪問(因為 10.0.0.54 是您的 vpn 後面的專用網路)。

隨著ProxyPreserveHost On您的伺服器將生成連結到:http ://subdomain.request.com …

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