我正在努力完成以下工作:
我有什么选择?实现这一目标的任何一般指导原则?什么是良好的代理实现选择?还需要随着时间的推移动态添加子域,这会重定向到特定的内部ips /端口。
ssl证书如何在具有子域的设置中工作?每个子域都需要单独的证书吗?
答案 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>