Laravel 应用程序和负载均衡器
Posted
技术标签:
【中文标题】Laravel 应用程序和负载均衡器【英文标题】:Laravel Application & Load balancer 【发布时间】:2018-10-15 22:24:57 【问题描述】:我在 AWS 云上托管了我的应用程序,负载均衡器运行在两个实例之上,这两个实例由 nginx 在 php7.0-fpm 之上提供服务。假设我的应用程序下载了一个文件并将其存储在本地,以便可以将内容提供给客户。带弹性伸缩组,配置两个实例;
1) 如果我的会话从下载文件的实例 1 开始,然后突然切换到实例 2,我会得到相同的内容吗?
或者
2) 如果在单个实例上创建会话,在我注销应用程序之前是否会使用同一个实例?
非常感谢任何帮助!
【问题讨论】:
我建议下载并保存在 S3 中,以便每个实例都可以使用它 @Mumtaz 我同意.. 对于静态文件来说没问题。但是,如果我想编辑文档怎么办?假设它是一个电子表格。本地发生的操作不会被打断吗? 1) 是的。 2) 是的。 你能详细说明@DigitalDrifter吗? 【参考方案1】:对于具有 1 个以上实例且负载均衡的网站,强烈建议您将缓存和会话存储在 1 个位置,而不是多个位置。为此,您可以在所有服务器上安装 memcached
并将它们配置为将它们指向 1 个服务器以存储所有内容。
SESSION_DRIVER=memcached
CACHE_DRIVER= memcached
MEMCACHED_HOST=127.0.0.1 #on your memcache server, point to localhost
MEMCACHED_HOST=10.10.1.10 #on other instances, point to memcache server
MEMCACHED_PORT=11211
对于文件和图像上传,请使用 AWS 的 S3 或带有 FTP 的专用存储服务器进行存储,以便所有服务器可以直接以相同的方式访问它。最简单,最高效:)
如果您将它们存储在本地,您的服务器将不会与相同的内容同步,并且您的用户最终会得到 404。
【讨论】:
解决了。谢谢@emotality :) 我们应该在单独的服务器中单独托管 memcache,而不是完整的应用程序。由于 ASG 组下的实例可能会根据策略终止。以上是关于Laravel 应用程序和负载均衡器的主要内容,如果未能解决你的问题,请参考以下文章
如何在负载均衡器 Laravel 后面的 nginx 中将远程 IP 地址列入白名单
配置应用程序负载均衡器以在 Elastic beanstalk 中将 http 路由到 https
如何将面向公众的负载均衡器连接到私有 VPC 中的 EC2 实例