- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 Memcached 中保存打包 (gzip) html 并从 nginx 中使用:
location / {
ssi on;
set $memcached_key "$uri?$args";
memcached_pass memcached.up;
memcached_gzip_flag 2; # net.spy.memcached use second byte for compression flag
default_type text/html;
charset utf-8;
gunzip on;
proxy_set_header Accept-Encoding "gzip";
error_page 404 405 400 500 502 503 504 = @fallback;
}
<!--# include virtual="/remote/body?argument=value" -->
upstream memcached {
server localhost:11211;
keepalive 100;
}
upstream unmemcached {
server localhost:21211;
keepalive 100;
}
server {
server_name dev.me;
ssi_silent_errors off;
error_log /var/log/nginx/error1.log debug; log_subrequest on;
location / {
ssi on;
ssi_types *;
proxy_pass http://unmemcached;
proxy_max_temp_file_size 0;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
location @fallback {
ssi on;
proxy_pass http://proxy.site;
proxy_max_temp_file_size 0;
proxy_http_version 1.1;
proxy_set_header Connection "";
error_page 400 500 502 503 504 /offline.html;
}
}
server {
access_log on;
listen 21211;
server_name unmemcached;
error_log /var/log/nginx/error2.log debug; log_subrequest on;
location / {
set $memcached_key "$uri?$args";
memcached_pass memcached;
memcached_gzip_flag 2;
default_type text/html;
charset utf-8;
gunzip on;
proxy_set_header Accept-Encoding "gzip";
error_page 404 405 400 500 502 503 504 = @fallback;
}
location @fallback {
#ssi on;
proxy_pass http://proxy.site;
proxy_max_temp_file_size 0;
proxy_http_version 1.1;
proxy_set_header Connection "";
error_page 400 500 502 503 504 /offline.html;
}
}
最佳答案
基本上有两个问题需要考虑——过滤器模块的顺序是否合适,以及 gunzip 是否适合您的情况。
0. gunzip/ssi/gzip的顺序。
一个简单的search for "nginx order of filter modules"显示顺序是在编译时根据 auto/modules
的内容确定的外壳脚本:
Multiple filters can hook into each location, so that (for example) a response can be compressed and then chunked. The order of their execution is determined at compile-time. Filters have the classic "CHAIN OF RESPONSIBILITY" design pattern: one filter is called, does its work, and then calls the next filter, until the final filter is called, and Nginx finishes up the response.
The order of filters is derived from the order of execution of nginx modules. The order of execution of nginx modules is implemented within the file auto/modules in the nginx source code.
auto/modules
显示
ssi
介于
gzip
之间和
gunzip
,但是,尚不清楚模块的执行方式(从上到下或从下到上),因此,默认值可能是合理的,或者您可能需要切换两者(不一定支持,恕我直言)。
http_not_modified
的位置。过滤器,作为
If-Modified-Since
的示例给出根据上面的 EMiller 指南进行处理;我想它必须排在最后,在所有其他人之后,如果是这样,那么,确实,gunzip/ssi/gzip 的顺序似乎与您需要的完全相反。
Enables or disables decompression of gzipped responses for clients that lack gzip support.
Content-Encoding
原样回复的
gzip
,如果是,则继续。然而,文档中的下一句(在上面引用的一句之后)似乎表明它与
gzip
有更多的交互。模块,因此,也许还涉及其他内容。
gunzip
是合理的。不参与,因此,SSI 模块将永远不会有任何有效的东西可以处理。这就是为什么我建议您确定 gunzip 在通过
curl
执行简单的纯文本请求之间是否正常工作和/或不同。与使用
Accept-Encoding
的浏览器制作的相比其中包括
gzip
.
gunzip
过滤器将无条件地对
memcached
中的数据进行解压。 ;我想你可能不得不忽略或重置
Accept-Encoding
header 之类的。
关于带有 memcache、gunzip 和 ssi 的 Nginx 不能一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49590415/
memcached 能否充分利用多核?或者有什么办法可以调整这个? 最佳答案 默认情况下,memcached 是多线程的,并且在使许多内核饱和时没有问题。在更大规模的并行机器(例如 256 核 CMT
有没有办法根据通配符键使内存缓存中的条目无效? 因此,如果我有以下内存缓存键: data/1 data/2 data/3 有没有一种方法可以使这些 key 失效,例如 data/* ?一口气清除一堆陈
Memcache 可以配置为使用磁盘存储而不是 RAM 吗? 我在 High IO Amazon EC2 实例上运行 Memcache Server。该实例有 2TB 的 SSD 存储可用。我可以将
memcached 的最大 key 过期时间是多少? 如果我不提供过期时间并且缓存已满,会发生什么? 最佳答案 您可以通过提供 Unix 时间戳而不是天数来将 key 过期设置为某个日期。该日期可以是
我有一个运行 php/mysql 的网站。该应用程序将被多次“复制”。每个实例都会获得自己的数据库、一组 php 文件(通配符)域,您明白了。 现在应用程序的某些部分是使用 memcache 进行缓存
是否可以根据某些正则表达式获取 memcached key 列表?我知道一种解决方案是将 key 存储在数据库中,并在需要删除这些 key 时获取列表。这意味着,它将给数据库带来额外的成本。 我想知道
我们发现使用我们的 memcache 时,一些键往往会丢失。为了调试,我使用命令 stats cachedump 输出是这样的: ITEM key-stuff-123-mlgtr-tmura [5
从 Network Solutions 移至托管站点,出现错误 fatal error :第 6 行 上/data/.../include/connect.inc 中未找到类“Memcache” 我该
我遵循了这个 tutorial 中的说明关于如何安装 nginx、php 和 mysql,包括 php5-memcache。 我想知道我是否还需要安装没有“php5”前缀的 memcache 或 me
我在 ubuntu 12.04 上运行 apache/php/memcached 我设置的 key 在过期后仍然有效。我们使用的代码与我们从中迁移的内存缓存 PAAS 的代码相同。 我如何确认过期实际
假设我在开始时有两个 memcached 节点( 节点 A, B ),当我添加一个新的 时节点 C ,部分键被重新映射,并且由于一致散列只有其中一些。 让我们假设一个键为“ foo ”的值原来在服务器
真的,我只想知道memcached中的slab是什么。如果有认识的同事能回答我的话会更好。 谢谢你的回答... 最佳答案 长时间运行的应用程序(如 memcached)会遇到内存碎片问题,服务运行时间
在 memcached 概述中 here 它说: Memcached servers are generally unaware of each other. There is no crosstal
当您在 memcached 中放入一个值时,您可以设置一个过期时间。 但是,当您增加一个值时,您不能(至少不是来自 PHP )设置新的到期时间。 我的问题:到期时间是否在递增时重置为其初始值?或者它没
我在我的 centos 服务器上使用 memcached,我的项目很大并且有超过 1MB 的对象我需要保存到 memcached,好吧,我不能!因为 max_item_size 是 1MB,无论如何要
我尝试使用本教程在 MAMP - Snow Leopard 10.6.2 中安装 memcached: Setup a Memcached-Enabled MAMP Sandbox Environme
我试图添加的方式 -l 11211 -l 11212 在 memcached conf 文件中。但它只是在听第一个,即 1121 最佳答案 首先我使用了 mikewied 的解决方案,但后来我遇到了自
我希望记录我的 memcached 服务器中正在进行的所有事件。所有读取和写入。 这将用作云中许多远程 php 应用程序的分布式守护程序,并且需要一种通过 SSH 登录并检查守护程序上正在进行的事件的
我在使用 memcached 时遇到了一些问题,我的一个想法是它可能已经在我尝试运行它的端口上运行,由我们网络上的其他用户启动。有没有办法知道当前正在使用哪些 memcached 端口? 最佳答案 要
运行 4 个 .5GB 内存缓存服务器或运行一个 2GB 实例有什么区别吗? 运行多个实例有什么好处吗? 最佳答案 如果一个实例失败,您仍然可以享受使用缓存的优势。如果您使用一致性哈希将相同的数据引入
我是一名优秀的程序员,十分优秀!