使用子域的代理HTTP请求

时间:2011-08-24 19:37:13

标签: networking proxy https dns subdomain

我正在努力完成以下工作:

  1. HTTP请求进入地址subdomain.domain.com到运行代理的机器上的公共IP(也许是apache?还有什么更好的?)
  2. 基于子域,我希望将请求重定向到私有IP和特定端口上的内部计算机。该请求的响应将来自该内部计算机。
  3. 我有什么选择?实现这一目标的任何一般指导原则?什么是良好的代理实现选择?还需要随着时间的推移动态添加子域,这会重定向到特定的内部ips /端口。

    ssl证书如何在具有子域的设置中工作?每个子域都需要单独的证书吗?

2 个答案:

答案 0 :(得分:1)

Apache对这个问题非常合理。您可以使用mod_proxy

执行虚拟主机
<VirtualHost *:80>
    ServerAdmin xxx@yyy.com
    ServerName foo.yyy.com

    ProxyRequests Off
        <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>
    ProxyErrorOverride On                       
    ProxyPass / http://192.168.1.1/
    ProxyPassReverse / http://192.168.1.1/
    <Location />
        Order allow,deny
        Allow from all
        </Location>

</VirtualHost>

如果您希望托管数百或数千个子域,您实际上可以使用mod_rewrite执行此操作,其中包含一个涉及本地名称查找的技巧,允许您将bar.yyy.com代理为{ {1}}。将mod_rewrite用于大规模虚拟主机是mentioned in the apache docs,使用它代理而不是仅重写是相对简单的。这样做的好处是可以使用DNS纯粹添加新的子域。

就SSL而言,如果您只是使用local.bar.yyy.com作为子域名,则可以使用wildcard certificate(我既不推荐也不反对thwate,他们只是对它有合理的描述)。在一般情况下,虽然在单个公共IP地址is a bit more tricky后面托管多个SSL站点。

答案 1 :(得分:1)

设置不是太难。您只需为每个子域创建一个虚拟主机,并将vhost配置为代理。无论您选择哪种代理软件,方法都是相同的。我建议您使用Nginx作为反向代理,因为配置更容易,性能比Apache好得多。如果您仍想使用Apache,请确保不在代理计算机上运行PHP并使用mpm_worker而不是mpm_prefork。

您可以创建一个脚本,将新的子域添加到配置文件中。它应该不会太难,因为它们看起来几乎相同,除了SSL证书的路径和骨干服务器的IP。

对于SSL,您可以使用通配符证书,该证书将涵盖整个域,包括子域。并非所有平台都支持此功能,但在过去几年中支持率已经提高,因此应该非常安全。

否则,如果没有通配符证书,则每个子域需要一个证书和一个单独的IP地址(因为在域名已知之前建立了SSL连接,您需要通过不同的IP区分不同的证书)。 / p>