在应用程序的横向扩展时,我会使用中央前端负载均衡器。Nginx 应该处理由单个服务器动态提供的任何负载。我们有 nginx 作为 6 个动态服务器和一个静态内容服务器的前端,并且在 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,以防万一它发生故障。