Apache proxy_http重定向到ip并设置主机名


16

希望你们能帮助我解决我遇到的代理问题。

我已经拥有的

我已经设置了一个Apache http反向代理,以将请求从* .proxy.domain代理到* .intern.domain。Apache是​​从外部网络访问我的内部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

没问题,但是不幸的是,app-dev服务器运行的是应用服务器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将落在dev-server上。

我正在寻找一个选项,仅在app-dev.proxy.domain的vhost配置文件内设置/ etc / hosts条目,以便每个其他vhost配置都将DNS用于app.intern.domain。

想法...

有没有办法告诉apache配置,以

ProxyPass / http://10.0.1.2/

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

编辑dev-servers网络应用程序以监听app-dev是没有选择的,因为它应该是精确的副本(不是我的决定...)

谢谢!

Answers:


34

可能您可以将mod_headers与mod_proxy结合使用。我还没有测试过。

因此,对于您的app-dev虚拟主机,您可以:

RequestHeader set Host "app.internal.domain"

然后您将添加:

ProxyPreserveHost On

2
ProxypreserveHost设置完美地完成了这一任务。谢谢!
一些Linux Nerd

3

丑陋的解决方法是使用/ etc / hosts(而不是:滥用)将app.internal.domain指向localhost,然后将Apache配置为侦听另外两个端口,每个端口用于您的应用程序和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>

2

添加到反向代理的配置(敌人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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.