希望你们可以帮我解决我的代理问题。
我已经有了
我已经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