我认为,正在超越一个VPS一个Web应用程序。 该架构包含大量小的用户,每一个都有自己的子域。 用户不进行交互。 负载意味着我将一些用户,所有新用户,到Web应用程序的另一个安装在单独的服务器上。
目前,每一个用户的子域下降到相同的虚拟主机,其中单个PHP前端控制器显示基于主机名相应的内容。 对于* .mydomain.com来有一个通配符DNS记录指向当前服务器。
什么是路由不同的用户子域到不同的服务器我最好的选择?
我的想法:
- 为每个服务器一个新的顶级域名。 user.s1.mydomain.com,user.s2.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的负载均衡进行代理清漆缓存,这又代理了动态内容的服务器。
如果你担心的Nginx是一个单点故障,设置一个辅助服务器准备承担前端的IP在失败的情况下。