【发布时间】:2014-09-17 10:45:11
【问题描述】:
我想通过 Apache 2.4 使用两个具有不同主机名(虚拟主机)的不同反向代理来代理一个网站——我们称之为“APP”。我们将这些代理称为“Alfa”和“Beta”。我希望 Alfa 成为“公共代理”,它将显示网站的正常版本。 Beta 代理将限制对某些客户端 IP 的公共访问,但在这里我想在网站的每个页面顶部显示某种类型的敏感信息。我们将敏感信息的这些部分称为“SENS”。
这是我当前的 apache 配置。
Listen 443
NameVirtualHost *:443
SSLStrictSNIVHostCheck off
## Virtual host for the Alfa Proxy
<VirtualHost *:443>
ServerName alfa.mysite.org
RewriteEngine On
<Location /app/>
ProxyPass http://x.x.x.x:8080/app/
ProxyPassReverse http://x.x.x.x:8080/app/
</Location>
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile conf/alfa.crt
SSLCertificateKeyFile conf/alfa.key
</VirtualHost>
## Virtual host for the Beta Proxy
<VirtualHost *:443>
ServerName beta.mysite.org
RewriteEngine On
<Location /app/>
Require ip 192.168.0
ProxyPass http://x.x.x.x:8080/app/
ProxyPassReverse http://x.x.x.x:8080/app/
</Location>
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile conf/beta.crt
SSLCertificateKeyFile conf/beta.key
</VirtualHost>
为了仅向 Beta 版用户显示 SENS,我需要以编程方式检测来自哪些代理请求。现在,我研究了反向代理请求标头的使用,例如“X-Forwarded-Server”。假设我在 APP 中定义了某种安全过滤器(例如 Spring Filter),仅当 X-Forwarded-Server 等于“beta.mysite.org”时才允许在页面上呈现 SENS。这应该可以正常工作。
但我的问题是:我能否确定不会发生某种对代理标头的篡改,从而允许 alfa.mysite.org 的用户实际查看我网站的 SENS 部分?
如果是这样,是否有任何其他方式可以“安全地”执行此操作。 拥有两个不同版本的 APP 或在两个不同的容器上部署 APP 是我想要避免的。
感谢任何 cmets 或建议。
【问题讨论】:
标签: apache security proxy reverse-proxy