我维护着一个 Web 应用程序,它的容量超出了单个 VPS。该架构由大量小用户组成,每个小用户都有自己的子域。用户不交互。加载意味着我必须将一些用户和所有新用户移动到单独服务器上的另一个 Web 应用程序安装。
目前,每个用户子域都属于同一个虚拟主机,其中单个 PHP 前端 Controller 根据主机名显示适当的内容。 *.mydomain.com 的单个通配符 DNS 记录指向当前服务器。
将不同的用户子域路由到不同的服务器的最佳选择是什么?
我的想法:
最佳答案
在扩展应用程序时,我会使用中央前端负载均衡器。 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 负载均衡器代理一个 varnish 缓存,后者又代理动态内容服务器。
如果您担心 nginx 是一个单点故障,请设置一个辅助服务器,准备好在前端发生故障时承担前端的 IP。
关于php - 水平缩放 : routing user-generated subdomains between servers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10273291/