负载均衡器后面的 SilverStripe

2024-01-06

我有一个 SilverStripe 实例在 AWS 负载均衡器后面的两台服务器上运行。为了共享会话信息,我正在运行 Elasticache Redis 服务器。我将我的 php 会话存储信息设置为:

ini_set('session.save_handler', 'redis');
ini_set('session.save_path', 'tcp://127.0.0.1:6379');

在我登录到 CMS 的管理部分后,我可以在服务器之间跳转,它会记住我,但是当在 CMS 中的部分之间切换时,主要部分不会呈现(AJAX 调用)。据我所知,另一台服务器没有意识到(无论您从第二个请求哪一个),您已经加载了 CMS 管理员,并且在响应标头中表示要加载新版本的 JS 依赖项,然后将管理员和它不加载。

读入the docs https://docs.silverstripe.org/en/3/developer_guides/performance/caching/SilverStripe 使用 Zend_Cache 来获取一些额外信息。我想如果我加载管理界面,然后删除缓存目录,它会复制问题。事实并非如此。

然后我尝试使用该模块 https://github.com/andrelohmann/silverstripe-cache-backends更改 Zend_Cache 正在使用的存储引擎。我补充道:

SS_Cache::add_backend(
    'primary_redis', 
    'Redis',
    array(
        'servers' => array(
            'host' => 'localhost', 
            'port' => 6379, 
            'persistent' => true, 
            'weight' => 1, 
            'timeout' => 5,
            'retry_interval' => 15, 
            'status' => true, 
            'failure_callback' => null
        )
    )
);
SS_Cache::pick_backend('primary_redis', 'any', 10);

到我的 mysite/_config.php ,这在 redis 中存储一些 cms 信息,例如密钥CMSMain_SiteTreeHints9b258b19199db9f9ed8264009b6c351b,但是这仍然不能解决负载均衡环境中服务器之间更改的问题。

SilverStripe 还可以在哪里存储缓存数据?我是否正确实施了该模块?


默认管理界面(假设您使用的是 3.x)使用​​名为的 javascript 库jquery.ondemand- 这会跟踪已包含的文件(一种相当古老的前身,例如“require.js' - 仅在没有 AMD 且有 CSS 支持的情况下)。

为此,与 CMS 本身有任何关系的可能性很小 - 考虑到 Web 本质上是无状态的,并且您用来保存状态的方法在服务器之间共享(数据库和会话数据) 。

What is notHA 集群中各个实例之间共享的是物理文件。这里的原因很可能(但不一定会)是mtime提供给 URI 末尾的标记ondemand- 最初是为了避免与主题更改(开发人员制作或以其他方式自动化)相关的浏览器缓存问题。

您毫无疑问检查过的标题包括(always,无论 HAProxy、nginx、ELB 或其他选择的端点)X-Include-CSS and X-Include-JS- 其中一个例子如下:

X-Include-JS:/framework/thirdparty/jquery/jquery.js?m=1481487203,/framework/javascript/jquery-ondemand/jquery.ondemand.js?m=1481487186,/framework/admin/javascript/lib.js?m=1481487181[...]

这是针对每个请求的ondemand可以检查并查看已包含的内容以及需要添加的内容。

(顺便说一句,这些标头的大小是导致nginx头缓冲区问题导致502在“默认”设置中。)

那么,该怎么办呢?

静态文件should如果您正在部署静态代码,请在平衡实例之间保持相同的 mtime - 但这是需要检查的事情。另一方面生成的文件(例如Requirements::combine_files)需要在所有实例之间(重新)生成时同步,就像所有实例一样/assets对于您的站点,在这种情况下,mtime 应持续存在。Zend_cache虽然在这里不太可能产生任何影响APC可能是一个因素。当然,无论如何,首先要检查的是我的前提是否成立 - 例如通过 diff 工具运行来自两个后端的标头响应。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

负载均衡器后面的 SilverStripe 的相关文章

  • gmail 不断阻止 PHPmailer 登录

    我将在接下来的 8 小时内部署一个网站 而 Gmail 刚刚停止接受 PHPmailer 登录我的帐户 起初 它在测试过程中工作了几个小时 然后 它就停止工作了 我已经允许所有允许不太安全的应用程序从 gmail 登录 但它仍然不允许 ph
  • Laravel 从 5.6 升级到 Laravel 6

    我有一个项目https github com javedbaloch4 Laravel Booking https github com javedbaloch4 Laravel Booking发展于Laravel 5 6现在我想将其升级到
  • 通过 Ajax 加载内容时,WORDPRESS 音频播放器未加载,MediaElement.js 未应用

    我正在创建一个 WordPress 主题 当我使用 ajax 加载内容时 它不会将 MediaElements js 应用于我的音频播放器 因此不会显示音频 我认为这是因为 MediaElement js 加载了 wp footer 并且此
  • 重定向而不改变url

    我总是不喜欢 htaccess 我正在尝试建立一个所有请求都通过index php 的网站 但我希望URL 类似于www sample com home 该网址实际上会加载 www sample com index php page hom
  • 如何使用 phpunit 运行单个测试方法?

    我正在努力运行一个名为testSaveAndDrop在文件中escalation EscalationGroupTest php with phpunit 我尝试了以下组合 phpunit EscalationGroupTest escal
  • 在 php 中为类自动生成 getter 和 setter 的最佳方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我经常创建一个包含一些私有变量的类 当设置此类的实例时 应该可以使用 getter 和 setter 填充该类的所有变量 有没有一种简单的方法可
  • Yii 使用 ajax 进行分页

    我需要使用ajax启用分页 我的代码 控制器 更新内容ajax function actionIndex dataProvider new CActiveDataProvider News array pagination gt array
  • Woocommerce 让产品显示在存档页面中

    我正在尝试让所有产品显示在我商店的存档页面中 我想知道他们的id我正在使用我的一个钩子 它在 wp head 上运行并检查 if is product category 我想以某种方式访问 产品的查询并获取它们的 ID if is prod
  • 如何从父类函数访问子类中定义的常量?

    我从 php net 看到这个例子 但 c MY CONST 仅在 5 3
  • Apache 访问 Linux 中的 NTFS 链接文件夹

    在 Debian jessie 中使用 Apache2 PHP 当我想在 Apache 的文档文件夹 var www 中创建一个新的小节时 我只需创建一个指向我的 php 文件所在的外部文件夹的链接 然后只需更改该文件夹的所有者和权限文件夹
  • 如何使用 php 下载/打印页面的特定部分

    我有一个 HTML 页面如下 Lorem Ipsum is simply dummy text of the printing and typesetting industry Lorem Ipsum has been the indust
  • 从 .phar 存档中提取文件

    对于 Phar 文件 我完全错过了一些东西 我正在安装一个需要 phpunit pdepend 和其他依赖项的项目 我将它们作为 phar 文件获取 但是 我无法使用命令行工具 php 命令 从中提取文件 我用谷歌搜索了这个问题 但没有发现
  • 通过 $_SESSION 从一个脚本发送到另一个脚本期间数据丢失

    我正在尝试将一个充满属性的对象从一个 PHP 发送到另一个 PHP SESSION object obj where obj是一个用 foreach 循环指定的对象 foreach array of objects as obj SESSI
  • 使用 Ajax.Request 将 JSON 从浏览器传递到 PHP 的最佳方法

    您好 我有一个 JSON 对象 它是一个二维数组 我需要使用 Ajax Request 将其传递给 PHP 我知道的唯一方法 现在我使用js函数手动序列化我的数组 并获取以下格式的数据 s 1 d 3 4等 我的问题是 有没有办法更直接 有
  • 表单计算器脚本基本价格未加载 OnLoad

    我的表单中有一个计算器来计算我的下拉选项选择 function select calculate on change calc input type checkbox calculate on click calc function cal
  • CURL 中的 data-urlencode 是什么意思?

    我搜索了很多个小时试图弄清楚 php curl 中的 data urlencode 是什么 我尝试过这个 但我认为这是不对的 xmlpost object1 file https www lob com goblue pdf 在文档中是 d
  • 如何在 PHP 中从 IP 地址/国家/地区名称查找时区 ID?

    谁能告诉我 PHP 中是否有任何方法可以从 IP 地址或国家 地区名称获取时区区域 例如 亚洲 加尔各答 描述 我正在尝试根据他 她的国家 地区设置用户时区 我从他的 IP 地址获取用户所在国家 地区 但我需要该国家 地区的时区区域 例如
  • 一次播种多行 laravel 5

    我目前正在尝试为我的用户表播种 如果我像这样尝试 2 行 就会失败 如果我只使用单个数组而不是 users 数组内的 2 个数组来创建一些假数据 那么效果很好 我做错了什么 正确的方法是什么 class UserTableSeeder ex
  • 简单的 PHP 表单:电子邮件附件(代码 Golf)

    想象一下 一个用户想要在其网站上放置一个表单 该表单将允许网站访问者上传一个文件和一条简单的消息 该消息将立即通过电子邮件发送 即 该文件未存储在服务器上 或者如果该文件存储在服务器上 仅暂时 作为文件附件 并在邮件正文中添加注释 查看更多
  • post php mysql 的拆分关键字

    我有一个表存储帖子 ID 它的标签如下 Post id Tags 1 keyword1 keyword2 keyword3 我想循环遍历该表中的每一行并执行以下操作 将关键字1 关键字2 关键字3放入新表中 word id word val

随机推荐

  • SVN 到 GitHub 迁移

    我必须将多个目录从 SVN trunk 迁移到one单个 GitHub 存储库 我可以使用以下命令一次克隆单个目录 git svn clone https svn repo url 如何使用 svn trunk 中的单个命令克隆多个目录 进
  • 错误:无法找到类 R.java 没有这样的文件或目录

    当我尝试开始一个新项目时 我不断收到此消息 ERROR Unable to open class file C Users Levi Desktop Android workspace Droid1 gen com androidbook
  • rbenv:权限被拒绝

    我正在关注 Ryan 的 RailsCast Episode 339 我已经安装了 rbenv 并且可以运行ruby v 我退出了会话 当我尝试返回时 通过su deployer from root 我收到这个错误 home deploye
  • 如何在不停止管道的情况下在多个 rtsp 视频流之间切换 [无缝流媒体]

    我使用 5 个 ip 摄像机 每个摄像机为我提供 5 个 RTSP 流 我选择这些 RTSP 视频流中的任何一个 并将它们与我的麦克风 音频 RTSP 流源 混合并将其广播到我的 RTMP 服务器 我尝试进行无缝流传输 这意味着当相机到相机
  • Node.js 应用程序中出现“EACCES”错误

    今天我通过卸载旧版本来更新节点版本 我最近安装的版本是 4 5 0 LTS 安装后 当我尝试安装新的 npm 时 它不起作用并给出以下错误 C Users myuser npm install g yo npm ERR Windows NT
  • 通过 VBA 传递 Python 参数

    我写了一个python脚本 需要使用VBA调用 我编写了一个 python 脚本 可以解析 pdf 将我需要的数据存储在变量中 并写入预制的 Excel 工作表以用这些值填充单元格 我已经成功地能够调用该脚本并使用以下代码运行它 Sub R
  • Chrome 和 Android 中的 Web SQL 存储限制?

    因此 我正在编写一个 Web 应用程序 需要在离线 Web SQL 数据库中存储约 40MB 的离线数据 它需要在 Chrome 桌面 Safari 桌面和移动 和 Android 浏览器中工作 现在我知道这些浏览器支持 Web SQL 并
  • 如何在 RHEL Linux 服务器上安装 Cargo?

    我尝试在 RHEL 服务器上安装 Cargo curl https sh rustup rs sSf sh 但完成后 我得到回复 cargo bash cargo command not found 有其他安装方式吗 首先启用rhel 7
  • 如何在共享框架中为 XCTest 创建公共扩展?

    例如 我从不使用以下描述XCTestCase expectation 所以我想使用一个函数来为其提供默认值 并通过命名清楚地表明我正在初始化期望 因为您不能真正使用初始化程序XCTestExpectation 但如果扩展不在测试目标中 则无
  • 在 jboss 独立运行时事务无法继续 STATUS_MARKED_ROLLBACK

    有人遇到以下问题吗 我能够使用 jboss 工具在 eclipse 内的 jboss 中成功构建 部署和运行我的 javaee6 应用程序 但是当我们将其部署到另一台独立运行的服务器上时 我们遇到了错误 我在 eclipse 所在的同一台机
  • 片段活动未找到类异常 android

    我正在研究用于姜饼操作系统的片段活动 当我尝试在姜饼模拟器上运行应用程序时 由于以下原因 应用程序被强制关闭ClassNotFound错误 我在下面提供我的主要片段活动代码 和平的帮助将是值得赞赏的 package com example
  • 如何修复docker或重新安装它?

    我已经执行了这个命令 但现在 docker 不工作 如何正确修复 或重新安装 docker sudo rm rf var lib docker aufs 我已经尝试去做 apt get install reinstall docker 但没
  • 在旧版 .NET 平台上使用 .NET Core 包

    我正在使用 VS 中的新 类库 包 模板之一创建 NuGet 包 我想知道 有什么方法可以使用 PCL 中的包吗 not使用 NET Core 例如 我有一个包裹 Enu 具有以下project json title Enu project
  • 调用 Tumblr 帖子转发 api 时收到 401(未授权)

    我在调用 Tumblr 帖子转发 api 时收到 401 状态 其他 tumblr api 工作正常 我关注了 Stackoverflow 的一些链接 但无法使用它 当尝试发布到 tumblr 博客时不断收到 401 https stack
  • ArrayObject, getIterator();

    我试图理解什么getIterator 是的 我将解释 我所知getIterator是我们调用以包含外部迭代器的方法 问题是 getIterator 包含它有自己的方法关闭认为看起来相同的是迭代器接口 但它不能是一个接口 它可以是类 但我试图
  • 使用 Swiftmailer 发送多个附件

    我正在创建一个允许上传多个文件的表单 然后将表单字段值和附件通过电子邮件发送到特定地址 我正在使用 Swiftmailer 生成这些电子邮件 我知道如何使用 Swiftmailer 附加一个文件 但不知道如何附加多个文件 有谁知道使用 Sw
  • UIWebView 未使用 ARC 释放所有活动字节

    我目前正在 iOS 5 1 中构建一个使用 ARC 的导航控制器应用程序 我经常需要显示网页 我制作了一个 Web 查看器 它只是一个 UIWebView 两侧有一些自定义内容 当用户看完页面后 他们点击后退按钮 这将释放与自定义 Web
  • 查找多个重叠矩形的并集 - OpenCV python

    我有几个包含单个对象的重叠边界框 但它们在某些地方重叠最少 作为一个整体 它们包含了整个对象 但是 openCV 的 groupRectangles 函数不会返回包含该对象的框 我拥有的边界框以蓝色显示 我想要返回的边界框在这里以红色显示
  • C#:当存在多个类型参数时,为什么泛型类型推断不起作用?

    这是两个示例 这工作正常 void Main var list Queryable ProjectTo typeof Projection public static class QueryableExtensions public sta
  • 负载均衡器后面的 SilverStripe

    我有一个 SilverStripe 实例在 AWS 负载均衡器后面的两台服务器上运行 为了共享会话信息 我正在运行 Elasticache Redis 服务器 我将我的 php 会话存储信息设置为 ini set session save