Apache proxy_httpredirect到ip并设置主机名

希望你们可以帮我解决我的代理问题。

我已经有了

我已经build立了一个Apache的HTTP反向代理,以代理从* .proxy.domain到* .intern.domain的请求。 Apache是​​从外部networking访问我的内部Web应用程序的唯一方法。

例:

app.proxy.domain -> app.intern.domain mail.proxy.domain -> mail.intern.domain 

这一切都很好,但我有以下问题。

问题
我想代理下面的请求:

 app.proxy.domain -> app.internal.domain app-dev.proxy.domain -> app-dev.internal.domain 

这是没有问题的,但不幸的是,应用程序开发服务器运行应用程序服务器web应用程序的确切副本,这个web应用程序只响应它的主机名(app.intern.domain)

所以我需要做的是代理以下

 app.proxy.domain -> app.internal.domain (10.0.1.1) app-dev.proxy.domain -> app.internal.domain (10.0.1.2) 

我可以做第二件事,通过在/ etc / hosts中添加“10.0.1.2 app.internal.domain”,但这也意味着app.proxy.domain将落在开发服务器上。

我正在寻找一个选项,只在app-dev.proxy.domain的vhostconfiguration文件中设置/ etc / hosts项,这样每个其他的vhostconfiguration将只使用DNS作为app.intern.domain。

思考…

有没有办法告诉Apacheconfiguration,

 ProxyPass / http://10.0.1.2/ 

但发送app.intern.domain作为主机名?

编辑开发服务器的Web应用程序来听应用程序开发是没有select,因为它应该是一个确切的副本(不是我的决定…)

谢谢!

可能你可以使用mod_headers和mod_proxy一起使用。 我还没有testing过。

所以对于你的app-dev虚拟主机你可以有:

 RequestHeader set Host "app.internal.domain" 

然后你会添加:

 ProxyPreserveHost On 

丑陋的解决方法是使用(而不是:滥用)/ etc / hosts将app.internal.domain指向localhost,然后configurationApache以侦听另外两个端口,每个端口对应于您的应用程序和app-dev。 所以反向代理两次:

 Listen 80 Listen 127.0.0.1:8001 Listen 127.0.0.1:8001 <VirtualHost *:80> ServerName app.proxy.domain ProxyPass / http://app.internal.domain:8001 </VirtualHost> <VirtualHost *:80> ServerName app-dev.proxy.domain ProxyPass / http://app.internal.domain:8002 </VirtualHost> <VirtualHost 127.0.0.1:8001> ServerName app.internal.domain ProxyPreserveHost On ProxyPass / http://10.0.1.1/ </VirtualHost> <VirtualHost 127.0.0.1:8002> ServerName app.internal.domain ProxyPreserveHost On ProxyPass / http://10.0.1.2/ </VirtualHost> 

添加到反向代理的configuration(对手app-dev.proxy ..):

 RequestHeader edit Host ^app-dev.proxy.domain app.proxy.domain 

你必须事先启用mod_headers:

 a2enmod headers 

内部服务器10.0.1.2应该有

 ServerName app.proxy.domain