laravel - Laravel 应用程序和负载均衡器
问题描述
我已经在 AWS 云上托管了我的应用程序,并且负载均衡器运行在两个实例之上,这两个实例由 Nginx 在 Php7.0-fpm 之上提供服务。假设我的应用程序下载了一个文件并将其存储在本地,以便可以将内容提供给客户。带弹性伸缩组,配置两个实例;
1) 如果我的会话从下载文件的实例 1 开始,然后突然切换到实例 2,我会得到相同的内容吗?
或者
2) 如果在单个实例上创建会话,在我注销应用程序之前是否会使用同一个实例?
任何帮助深表感谢!!
解决方案
对于具有超过 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。
推荐阅读
- javascript - 我想在一个按钮上添加一个事件处理程序,该处理程序将使用 Vue.js 2.0 显示组件
- spring-integration - 消息传递到 QueueChannel 后如何处理错误?
- gcc - 调试简单的 ARM 64 位可执行文件会导致 GDB 出现内部错误
- google-sheets - Google 数据准备 - 无法从 BigQuery 导入表格(从 Google 表格创建)“未找到”
- ruby-on-rails - Spree 登录页面的额外 html 来自哪里?
- python - 如何优化循环和条件语句?
- python - 我如何知道 request.FILES 中的特定文件是从哪个输入标签上传的?
- c# - 使用 ASCII 编码将变音符号保存在文本文件中
- apache - Htaccess 将 http 或 https 从 domain.com 重定向到 https domain.net
- c# - 调用具有未知签名的方法