我维护的Web应用程序超出了单个VPS。该体系结构由大量小用户组成,每个用户都有自己的子域。用户不进行交互。加载意味着我必须将一些用户和所有新用户移动到另一台服务器上的另一个Web应用程序安装。
目前,每个用户子域都属于同一个虚拟主机,其中单个PHP前端控制器根据主机名显示相应的内容。 * .mydomain.com的单个通配符DNS记录指向当前服务器。
将不同用户子域路由到不同服务器的最佳选择是什么?
我的想法:
答案 0 :(得分:4)
在缩小应用程序的那一刻,我会选择一个中央前端负载平衡器。 Nginx应该处理由单个服务器动态提供的任何负载。我们将nginx作为六个动态服务器和一个静态内容服务器的前端,并且nginx上没有瓶颈。
在您的扩展点,设置nginx以处理所有静态内容本身,并将代理动态内容反向为所需数量的框。简单代理传递的设置接近:
upstream upstream_regular_backend {
fair;
server 10.0.0.1:80;
server 10.0.0.2:80;
}
server {
listen 0.0.0.0:80;
server_name example.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
location / {
proxy_pass http://upstream_regular_backend;
}
}
用于提供静态内容并将所有其余内容传回去,例如:
server {
listen 0.0.0.0:80;
server_name example.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
index index.php;
root /some/dir/:
location ~ \.php {
proxy_pass http://upstream_regular_backend;
}
}
当然,如果您不使用PHP,请相应地调整配置。
在上游定义中,“公平;”将根据响应时间对后端进行负载均衡。对于缓存动机,您可能想要使用“ip_hash;”相反,因为它将始终在同一台服务器上发送来自客户端的请求。
我们的设置还有一段距离。我们有nginx负载均衡器代理清漆缓存,后者代理动态内容服务器。
如果您担心nginx是单点故障,请设置辅助服务器,以便在发生故障时准备好假设前端的IP。