執行 VPN 的本地伺服器的 Apache mod 代理
我有一個執行 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 …