Apache mod代理到运行VPN的本地服务器

我有一个运行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>

加勒斯几乎是正确的,但你必须做相反的事情:

 <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上的服务器将会收到原来的“Host:”Header(又名:subdomain.request.com,而不是10.0.0.54),因为10.0.0.54的服务器可能正在创build基于这个头的链接,解决你的问题。

我的猜测是,你有错误是不是一个DNS错误,但networking错误,因为在您的设置服务器生成的url看起来像: http://10.0.0.54...这些url无法从互联网上(因为10.0.0.54是vpn后面的专用networking)。

ProxyPreserveHost On您的服务器将生成链接: http : ProxyPreserveHost On

在这种情况下,它更容易在mod_rewrite中使用代理函数[P]

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

您还应该了解ProxyPreserveHost指令

 ProxyPreserveHost On|Off 

http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypreservehost

如果你的代理服务器上有这个设置,它会将你正在查找的主机名传递给mod_proxy,如果mod_proxy不能解决这个问题,它会给你一个DNS错误。