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