负载平衡:Nginx,Varnish和HTTP会话

我必须build立一个负载均衡系统。 目前我有两台机器运行Nginx 0.8.52,PHP-FPM(在unix套接字上)和一个基于PHP Symfony 1.4.11的应用程序。

在第三台机器上,我必须select一个平衡器来安装。

我已经使用Varnish进行静态文件caching,但是我不知道Varnish负载平衡是否可以处理Symfony PHP会话。 另一种select是使用ip_hash进行Nginx负载平衡。

哪一个是最好的?

提前致谢

为什么不兼得? 把NginX放在前面来处理gzip压缩和后面的SSL和Varnish来处理caching和负载平衡。 后端应用程序将需要在数据库或Memcache上build立一些会话共享,如Kristaps和Varnish不会caching任何与Cookie或身份validation服务的dynamic内容,但其余的都会好的。

推荐的设置是为了创build一个独立的静态主机名(如static.example.com并从那里提供所有静态内容, 没有任何cookie (由于没有cookie,varnish将caching它),另一个用于可以通过Nginx或Varnish进行负载均衡的dynamic内容,使用cookie进行会话处理,以及所有后端共享会话信息,如上所述。

我不是symfony框架专家,但为了负载平衡目的,build议将会话从默认的基于文件的存储移动到memcache会话处理程序 ,以允许应用程序的会话部分扩展到单个应用程序之上。

您可以通过VCL魔术(在一些简单的客户端IP地址的十进制表示forms,例如模数)上对粘性会话进行归档。

devise清漆是caching服务器,而不是负载均衡器。清漆不支持SSL,这意味着需要单独的SSL终结者(最常见的是带有SSL模块的nginx)。

我build议你使用不是为了caching而devise的负载均衡器,而是为了完全dynamic的Web应用程序部分,如haproxy或nginx,它们都支持粘性会话。

我认为最好find一种方法来共享未来节点的会话数据,例如NAS存储,或者让负载平衡器共享php会话。 其他选项是重写您的应用程序,以便它可以使用mysql数据库进行会话,并再次通过节点共享该数据。