在我的网站上,我使用 memcached 进行了数据缓存。它存储完全生成的 html 页面。下一步是通过 nginx 从 memcached 获取这些数据,并在不启动 apache 进程的情况下将其发送回用户。首先,我尝试通过 php 后端从缓存中获取数据,并且成功了。但是当我尝试使用 nginx 进行此操作时,我几乎看不到损坏的数据。类似https://i.stack.imgur.com/JFGW0.png
我正在寻求帮助解决这个问题。
附言:这里是 nginx 配置的一部分,如果它能有所帮助
location / {
#add_header Content-Type "text/html";
set $cachable 1;
if ($request_method = POST){
set $cachable 0;
break;
}
if ($http_cookie ~ "beauty_logged") {
set $cachable 0;
break;
}
if ($cachable = 1) {
set $memcached_key 'nginx_$host$uri';
memcached_pass 127.0.0.1:11211;
}
default_type text/html;
error_page 404 502 504 405 = @php;
#proxy_pass http://front_cluster;
}
location @php {
proxy_pass http://front_cluster;
}
答案1
Nginx 不会对 Memcached 中存储的内容进行任何处理,它只是获取并原样返回给浏览器。
真正的原因是应用程序使用的 Memcached 客户端库。大多数库都会压缩较大的值(通常是在值大小超过某个阈值时),因此您必须将其配置为不这样做,或者设置memcached_gzip_flag
和gunzip 模块已启用。