我有两个 rails webapps,我已将其中一个 webapp 配置为响应多个域。我通过在 nginx 中将相应的服务器块设置为默认。
现在,我想让其他 Web 应用程序处理自定义多个域的请求,有没有办法使用具有单个 IP 地址的机器来做到这一点?(我知道我可以添加额外的 IP 地址并让其他 web 应用程序监听它,但我的服务器在 EC2 上,所以我无法添加更多 IP。)
这两个 Web 应用程序都知道它们应该响应哪些域,而且有很多域。此外,这些 Web 应用程序需要响应的域将会发生变化。所以我无法在 nginx 配置中对它们进行硬编码。我的服务器有 Ubuntu 10.04。
我对此进行了一些研究,我认为 HAProxy 可能能够进行这种路由。HAProxy ACL 是否可以访问 redis 之类的东西来查找 http 请求的目的地?
答案1
我不知道 haproxy 有这种特定的功能,但是 haproxy 确实允许:
- 从文件读取的 ACL:
acl host_list_a hdr_beg(host) -f /etc/haproxy/hostsA
- 用于重新加载配置
haproxy -f haproxy.cfg -p /var/run/haproxy-private.pid -sf $(</var/run/haproxy-private.pid)
。
因此,您可能可以设置/etc/haproxy/hostA
主机名列表。添加主机名时,运行重新创建该文件的命令(或类似命令,该文件可能与数据结构相关联),然后执行 haproxy 重新加载。
话虽如此,这感觉有点老套,经常以自动化方式重新加载负载均衡器感觉有点容易出错——所以值得弄清楚这是否真的是你需要做的。如果是,并且你做了这样的事情,你应该确保在程序中加入大量的错误检查和自我修复。