![Nginx 多虚拟主机配置](https://linux22.com/image/710943/Nginx%20%E5%A4%9A%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA%E9%85%8D%E7%BD%AE.png)
根据我们平台的要求,每个网站都将自动托管,并进行 DNS 配置,使网站在预订的域名上运行,并为每个域和子域配置 Nginx。
我们需要为 Nginx 进行动态虚拟主机配置,因此我们提出了下面提到的三个选项。
需要建议哪一个是正确的选择,因为我们的网站基础正在以每天 30 到 40 个新网站的速度增长,并且平台上已经有 2000 多个网站注册。
除此之外的任何更好的选择也将被考虑。
大量虚拟主机配置
这可以通过使用正则表达式进行动态实现server_name
。
优点:
- 单个文件、单个虚拟主机。
- 每次注册新域名时无需重新加载 Nginx。
- 可以合并任意数量的域。
缺点:
- 如果有人发现该服务器正在处理任何域请求,则可能导致 DDoS 攻击。
- 可能会减慢响应速度,因为每个请求都会执行数据库查询来验证域/子域是否存在于平台上。
解决问题的方法:
- 可以使用 Memcache 或 Redis 等缓存来缓存所有域和子域,因此只需很少的数据库查询即可检查域和子域的存在(仅在缓存失败的情况下)
- 使用Cloudflare,它可以帮助我们预防DDoS。
- Nginx 还可以配置为阻止过于频繁发送请求的某些 IP 的请求。
- 还可以使用不良的机器人阻止程序配置来阻止负责任何类型攻击的某些 IP 地址和机器人。
单独的虚拟主机文件配置
脚本在接收到新域名的请求时,将在单独的文件中创建虚拟主机,使其可供 Nginx 使用,启用它并重新加载 Nginx。
优点:
- 为每个新注册的域名提供单独的虚拟主机。
- 仅允许处理已注册的域名。
缺点:
- 需要为每个新注册的域名触发脚本,该脚本将以 sudo 用户/root 用户身份运行
- 可能导致1000多个文件需要由Nginx加载和处理。
- 对于每个新的虚拟主机,都需要重新加载 Nginx。
- 如果注册的域名太多,请求处理和管理可能会变得麻烦。
解决问题的方法:
- 不要使用多个文件,而是对所有虚拟主机使用单个文件。
单文件多主机配置
一个脚本,在接收到新域名的请求时,将在 Nginx 使用的单个文件中附加新的虚拟主机并重新加载 Nginx。
优点:
- 为每个新注册的域名提供单独的虚拟主机。
- 仅允许处理已注册的域名。
- 将所有虚拟主机的文件数量减少为一个。
缺点:
- 由于虚拟主机条目太多,文件可能会变得很大。
- 由于需要查找大量虚拟主机,可能会减慢 Nginx 处理速度。
- 对于每个新的虚拟主机,都需要重新加载 Nginx。
解决问题的方法:
- 除了拥有大量虚拟主机之外没有其他解决方案。
答案1
我们最终决定
单独的虚拟主机文件配置
原因是,我们平台上注册的大多数网站都是通过子域名提供服务的,很少有网站有自己的域名。因此,在这种情况下,带有通配符条目的单个文件将满足大多数网站的需求。对于少数拥有自己域名的网站,我们可以拥有单独的主机文件,并且可以自动完成。
这也有助于为每个子域和域提供 https 请求。我们还可以使用 Lua 脚本管理这些主机文件,从而在 nginx 服务器上自动执行一些操作。
如果有人有更好的选择,请回复您的评论,这将对我们很有帮助。