使用反向代理规避备案风险

这种小概率技术问题某种意义上也算是天·朝专利了:)
本文集中介绍阿里云(aliyun.com)中,使用反向代理规避备案风险。
还有如何在 SAE(Sina App Engine http://sae.sina.com.cn/ )中使用自有反向代理。
您需要一个境外服务器(不需要备案的服务器),作为代理服务器:)

访问流程

本文使用apache http作为http和proxy服务器。
client-proxy-httpd.png

  1. 客户端向代理服务器请求的 Host 为: test.com
  2. 代理服务器向http服务器请求含有 X-Forwarded-Host: test.com 。
    1. 当 ProxyPreserveHost On 时,客户端提供的 Host 会被传递到http服务器:test.com
    2. 当 ProxyPreserveHost Off 时,ProxyPass 指定的 Host 会被传递到http服务器:192.168.1.333(SAE:xxx.sinaapp.com)
  3. http服务器根据代理服务器指定的 Host 来判定应该使用哪个虚拟主机。

基本配置

httpd:

<VirtualHost *:80>
    ServerName   zoeey.org
    ServerAlias  *.zoeey.org
    DocumentRoot /sites/zoeey

    <Directory "/sites/zoeey">
        FileETag MTime Size
        Options  FollowSymLinks
        AllowOverride all

        SetEnvIf X-Forwarded-For "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" is_pass
        SetEnvIfNoCase Host "\.zoeey\.org$" is_pass
        Order Deny,Allow
        Deny from all
        Allow from env=is_pass
    </Directory>
</VirtualHost>

阿里云(aliyun)用户注意这里的allow设置。允许主域名和反向代理访问。
阿里云不允许空主机头,也就是需要将第一个vhost设置为deny。
上述的设置方式是允许以代理的方式访问空主机头,可用于用户自定义域名绑定。

PHP中获取用户访问时请求的Host:

if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
    $domain = $_SERVER['HTTP_X_FORWARDED_HOST'];
} else {
    $domain = getenv('HTTP_HOST');
}

proxy:

<VirtualHost *:80>
    ProxyPass /   http://192.168.1.333/
    # SAE # ProxyPass /   http://xxx.sinaapp.com/
    # ProxyPreserveHost On
</VirtualHost>

无论是SAE还是阿里云现在均不能直接绑定未备案域名,且不可以代理形式传递 Host 。
所以proxy配置中 ProxyPreserveHost 应为 Off ,或删除掉该行。

上述配置可以实现:
1、用户免备案绑定独立域名,并绑定在httpd首个vhost指定的目录上。
2、使用自己的反向代理服务器为尚未备案的SAE应用绑定自己的域名。

使用 X-Forwarded-Host 的 VirtualHost 绑定

当代理服务器的ProxyPreserveHost关闭时,Host 的传递被切换。
客户端提供的 Host 名称仅由 X-Forwarded-Host 持有。
此时我们不能使用传统的根据 Host 配置 VirtualHost 目录绑定。
下面介绍 httpd 如何使用 X-Forwarded-Host 绑定。

找到获取绑定所需 Host 名称的方法: ap_update_vhost_from_headers。
并先行判定 X-Forwarded-Host。
具体修改位置与方法如下。

httpd-2.2.17/server/vhost.c

AP_DECLARE(void) ap_update_vhost_from_headers(request_rec *r)
{
    r->hostname = apr_table_get(r->headers_in, "X-Forwarded-Host");
    /* must set this for HTTP/1.1 support */
    if (r->hostname || (r->hostname = apr_table_get(r->headers_in, "Host"))) {
        fix_hostname(r);
        if (r->status != HTTP_OK)
            return;
    }
    /* check if we tucked away a name_chain */
    if (r->connection->vhost_lookup_data) {
        if (r->hostname)
            check_hostalias(r);
        else
            check_serverpath(r);
    }
}

我们增加了 X-Forwarded-Host 获取,其优先于 Host 。
实际使用可参考 use_canonical_name_xhost-trunk.patch 中的 ap_get_xhost_from_headers 函数。

重新编译安装httpd即可。

参考资料

mod_proxy
ProxyPreserveHost
SetEnvIfNoCase
mod_mbox/httpd-dev/201205.mbox/%3C4FA30D5A.3040406@pearsoncmg.com%3E
use_canonical_name_xhost-trunk.patch

SEO

sae免备案
aliyun免备案
代理无法绑定域名
反向代理无法绑定域名
不传递 Host 的 vhost 绑定
不传递 Host 的 VirtualHost 绑定
ProxyPreserveHost Off,VirtualHost 绑定

X-Forwarded-Host VirtualHost 绑定

 

moxie 撰写  http://blog.zoeey.org/2012/06/15/client-proxy-httpd/

转载于:https://my.oschina.net/moxie/blog/64153

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Jumpserver 是一款基于 SSH 的远程管理工具,它提供了一个安全、易用的远程访问方式,可以用于远程管理服务器。在使用 Jumpserver 的过程中,可以通过 Nginx 实现反向代理,提高访问的安全性和性能。 使用 Nginx 作为 Jumpserver 的反向代理,可以带来以下好处: 1. 安全性增强:Nginx 是一款非常安全的 Web 服务器,它具有一些内置的安全特性,如内容缓存、攻击拦截等,可以有效地防止攻击者通过恶意攻击进入 Jumpserver。 2. 性能提升:Nginx 是一款高性能的 Web 服务器,具有快速的处理能力和优化的并发性能,可以提高 Jumpserver 的访问速度和稳定性。 3. 灵活的负载均衡:通过 Nginx 的负载均衡功能,可以配置多个 Jumpserver 实例,实现负载均衡和故障转移,提高系统的可用性和可靠性。 具体来说,使用 Nginx 作为 Jumpserver 的反向代理,可以按照以下步骤进行配置: 1. 安装 Nginx:在服务器上安装 Nginx,并确保其正常运行。 2. 配置 Jumpserver 反向代理:在 Nginx 配置文件中,添加 Jumpserver 的反向代理配置。需要指定 Jumpserver 的地址、端口号等信息,以及代理请求的规则。 3. 启动 Nginx:启动 Nginx 服务,使其开始代理 Jumpserver 的请求。 4. 测试访问:通过浏览器或其他访问方式,测试通过 Nginx 代理访问 Jumpserver 是否正常。 需要注意的是,在使用 Nginx 作为 Jumpserver 的反向代理时,需要确保 Nginx 的配置文件正确,并且与 Jumpserver 的配置文件兼容。同时,还需要对 Jumpserver 进行定期的备份和更新,以防止数据丢失或安全漏洞。 总之,使用 Nginx 作为 Jumpserver 的反向代理可以提高访问的安全性和性能,并带来其他好处。通过正确配置和定期维护,可以确保系统的稳定性和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值