标签: cache

备份过程刷新磁盘缓存

我有一个备份过程,它从磁盘读取大量数据,因此将所有内存用于磁盘缓存,在此过程中交换应用程序和其他缓存数据。备份完成后将备份数据保留在磁盘缓存中没有任何好处,因此我想限制内核可以为该进程缓存的数据量。是否可以?

谢谢,

linux hard-drive cache

7
推荐指数
1
解决办法
263
查看次数

Nginx 忽略用于缓存某些文件的查询字符串

我知道我的设置有点疯狂,但无论如何......

我在 Openshift 上设置了 Nginx 来缓存地图图块(对于地图查看器,您可以猜到目的,:-)),这些图块由我的家庭网络提供,该网络带宽有限(愚蠢的无线连接!)。Openshift 为我提供了无限带宽和 1 GB 磁盘,这应该足以缓存地图的热门部分。

但是,地图查看器喜欢发出这样的请求:

http://localhost/tiles/world/t/-1_0/-27_23.png?1381358434308
Run Code Online (Sandbox Code Playgroud)

这让 nginx 认为该文件不可缓存!我已经做了一些谷歌搜索,但由于我在阅读和编写正则表达式方面很糟糕,我想(从你那里)请求一种方法让 nginx 忽略 .png 文件的查询字符串,并且只从缓存中提供版本而不需要请求参数。

以下是服务器配置的相关部分:

http {

  proxy_cache_path  ${OPENSHIFT_RUNTIME_DIR}/cachefile levels=1:2 keys_zone=my-cache:599m max_size=700m inactive=250m;
  proxy_temp_path ${OPENSHIFT_RUNTIME_DIR}/cachefile/tmp; 
    include mime.types;
    default_type application/octet-stream;

    # Format for our log files
    log_format   main '$remote_addr - $remote_user [$time_local]  $status '
      '"$request" $body_bytes_sent "$http_referer" '
      '"$http_user_agent" "$http_x_forwarded_for"';

    sendfile on;
    keepalive_timeout 5;
    access_log ${OPENSHIFT_LOG_DIR}/access.log;

    port_in_redirect off;
    server_tokens off;

    tcp_nopush on; # off may be better for Comet/long-poll stuff
    tcp_nodelay off; # on may be …
Run Code Online (Sandbox Code Playgroud)

nginx cache reverse-proxy querystring

7
推荐指数
1
解决办法
1万
查看次数

如何让现有的缓存 Nginx 代理使用另一个代理绕过防火墙?

我的问题是关于使用 Nginx 作为另一个代理背后的代理。(有点混乱。)

我想设置 Nginx,以便它充当 npm 镜像的缓存代理服务器。这是链接:http : //eng.yammer.com/a-private-npm-cache/

在我的本地机器上,不受防火墙限制,以下配置工作正常:

proxy_cache_path /var/cache/npm/data levels=1:2 keys_zone=npm:20m max_size=1000m
inactive=365d;
proxy_temp_path /var/cache/npm/tmp;

server {
   listen 80;
   server_name classen.abc.lan;
   location / {
      proxy_pass http://registry.npmjs.org/;
      proxy_cache npm;
      proxy_cache_valid 200 302 365d;
      proxy_cache_valid 404 1m;
      sub_filter 'registry.npmjs.org' 'classen.abc.lan';
      sub_filter_once off;
      sub_filter_types application/json;
   }
}
Run Code Online (Sandbox Code Playgroud)

现在我想将它应用到位于附加防火墙后面的服务器。在日志中,我可以确认它访问了正确的上游 IP,但由于内部防火墙,请求失败。

我们有一个内部代理,我可以用它绕过防火墙,例如:

$ curl http://registry.npmjs.org
curl: (7) couldn't connect to host
$ http_proxy=http://proxy.abc.lan:1234/ curl http://registry.npmjs.org
... succeeds ...
Run Code Online (Sandbox Code Playgroud)

这个技巧不适用于 Nginx,因为它忽略了http_proxy环境变量。看了文档,还是想不通怎么修改配置,让它内部可以使用代理。

是否可以结合两种解决方案?重要的是缓存仍然有效,否则,您可以直接使用外部镜像 registry.npmjs.org。

也许,Nginx 应该使用内部代理(proxy.abc.lan)作为proxy_pass,但是内部代理如何知道应该将请求发送到外部 npm 镜像( …

firewall nginx proxy cache

7
推荐指数
2
解决办法
9250
查看次数

如何在其他 nginx 服务器面前使 nginx 反向代理缓存无效?

我在单个 IP 地址上运行 Proxmox 服务器,它将根据请求的主机向容器发送 HTTP 请求。

我在 Proxmox 端使用 nginx 来监听 HTTP 请求,我proxy_pass在不同server块中使用指令根据server_name.

我的容器在 Ubuntu 上运行,同时也在运行一个 nginx 实例。

我在完全静态的特定网站上缓存时遇到问题:在文件更新后,nginx 继续为我提供陈旧的内容,直到我:

  • 清除 /var/cache/nginx/ 并重启 nginx
  • proxy_cache off为此服务器设置并重新加载配置

这是我的配置的详细信息:

在服务器上(proxmox):

/etc/nginx/nginx.conf

user www-data;
worker_processes 8;
pid /var/run/nginx.pid;

events {
    worker_connections 768;
    # multi_accept on;
    use epoll;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    #tcp_nopush on;
    tcp_nodelay on;
    #keepalive_timeout 65;
    types_hash_max_size 2048;
    server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off; …
Run Code Online (Sandbox Code Playgroud)

nginx cache reverse-proxy

7
推荐指数
1
解决办法
1万
查看次数

Nginx 不处理 proxy_hide_header 和 proxy_ignore_header 指令

我在尝试让 Nginx 忽略并隐藏代理服务器的一些标头时遇到了麻烦。

我希望 Nginx 隐藏并忽略“Cache-Control”和“Server”标头,但它不起作用,我不知道为什么。

我的配置如下:

location / {
    proxy_pass http://111.131.50.42;
    proxy_hide_header Cache-Control;
    expires 60M;
    add_header Cache-Control "public";
    proxy_ignore_headers Cache-Control;
    proxy_hide_header Cache-Control;
    access_log off;
}
Run Code Online (Sandbox Code Playgroud)

但即便如此,我仍然收到原始“Cache-Control”和“Server”标头。

你知道我做错了什么吗?

PS 我不能使用 ngx_headers_more 模块。我无法将此模块添加到我们的 Nginx 安装中。

nginx cache http-headers

7
推荐指数
1
解决办法
3万
查看次数

Linux ZFS 不缓冲写入写入缓冲区 (SLOG/ZIL)?

遇到写 I/O 时,日志列中zpool iostat -v永远不会显示任何 ZIL 活动。这导致将数据写入磁盘时的等待时间高于预期(有时在争用期间超过 80 毫秒)。

                     capacity     operations    bandwidth
    pool              alloc   free   read  write   read  write
----------------  -----  -----  -----  -----  -----  -----  
storage           1.88T  2.09T      3  3.01K   512K  39.3M
  mirror           961G  1.05T      0  1.97K   128K  20.8M
    mpathf            -      -      0    393      0  20.8M
    mpathg            -      -      0    391   128K  20.6M
  mirror           961G  1.05T      2  1.04K   384K  18.5M
    mpathi            -      -      1    379   256K  21.1M
    mpathj            -      -      0    281   128K  18.3M
logs                  -      - …
Run Code Online (Sandbox Code Playgroud)

linux zfs cache zfsonlinux

7
推荐指数
1
解决办法
5441
查看次数

Cloudflare 未按预期缓存

我想知道为什么 Cloulflare 不会缓存某个静态 js 文件。

鉴于要求:

curl -I http://www.testlifeinuk.com/dist/lifeinuk.js
Run Code Online (Sandbox Code Playgroud)

标题返回如下:

HTTP/1.1 200 OK
Date: Mon, 12 Jan 2015 10:59:21 GMT
Content-Type: application/javascript
Connection: keep-alive
Set-Cookie: __cfduid=d11a9f01292153436a211a9d807a3399b1421060361; expires=Tue, 12-Jan-16 10:59:21 GMT; path=/; domain=.testlifeinuk.com; HttpOnly
X-Powered-By: Express
Etag: W/"507660-1420797981000"
Cache-Control: public, max-age=1382400
Last-Modified: Fri, 09 Jan 2015 10:06:21 GMT
Vary: Accept-Encoding
Via: 1.1 vegur
CF-Cache-Status: MISS
Expires: Wed, 28 Jan 2015 10:59:21 GMT
Server: cloudflare-nginx
CF-RAY: 1a78d818b4af0b81-LHR
Run Code Online (Sandbox Code Playgroud)

令我困惑的是,无论我做了多少次请求,它总是返回

CF-Cache-Status: MISS
Run Code Online (Sandbox Code Playgroud)

知道为什么吗?

cache cloudflare

7
推荐指数
1
解决办法
1万
查看次数

Nginx `if_modified_since` 仅适用于静态资源吗?

我似乎找不到足够的文档。我有一个生成一些动态响应的应用程序,但仍然可以从Last-Modified标题中受益——所以我发送了它。

但是,打开if_modified_since(设置为before,根据http://nginx.org/en/docs/http/ngx_http_core_module.html#if_modified_since)似乎对非静态资源没有任何影响。例如,php、python 应用程序。

这是因为 Nginx 不只是查看我的响应Last-Modified标头吗?因为我可以看到它们似乎设置正确,如下所示:

> GET /3.0/view.json?id=2 HTTP/1.1
> Host: xxxxxxxxxxxxx
> Accept: */*
> If-Modified-Since: Sat, 02 May 2015 19:43:02 GMT
>
< HTTP/1.1 200 OK
* Server nginx/1.4.7 is not blacklisted
< Server: nginx/1.4.7
< Date: Fri, 01 May 2015 19:56:05 GMT
< Content-Type: application/json; charset=utf-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< Vary: Accept-Encoding
< Last-Modified: Fri, 01 May 2015 19:56:05 GMT
Run Code Online (Sandbox Code Playgroud)

或者我忽略了更大的东西?只是好奇是如何 …

nginx cache http-headers

7
推荐指数
1
解决办法
7976
查看次数

在清除 DNS 缓存之前是否有标准的持续时间?

在清除 DNS 缓存之前是否有一个标准的持续时间,以便如果分心的操作员或卡住的密钥将 86400 的 TTL 转换为 864000000,您最终不会得到权威资源记录甚至整个 DNS 区域,其更改不会承认 27.397 年?

而且,如果没有针对此类错误的保护,那么允许 TTL 持续时间长达 68 年而不是最大可能是一个月的原因是什么?

domain-name-system cache dns-hosting ttl dns-zone

7
推荐指数
1
解决办法
362
查看次数

调试 Nginx 缓存未命中:尽管代理有效,但仍出现大量未命中

我的代理缓存路径设置为非常高的大小

proxy_cache_path  /var/lib/nginx/cache  levels=1:2   keys_zone=staticfilecache:180m  max_size=700m;
Run Code Online (Sandbox Code Playgroud)

并且使用的大小仅为

sudo du -sh *
14M cache
4.0K    proxy
Run Code Online (Sandbox Code Playgroud)

代理缓存有效设置为

proxy_cache_valid 200 120d;
Run Code Online (Sandbox Code Playgroud)

我通过以下方式跟踪 HIT 和 MISS

add_header X-Cache-Status $upstream_cache_status;
Run Code Online (Sandbox Code Playgroud)

尽管有这些设置,我还是看到了很多未命中。这是我在一小时前故意运行缓存预热器的页面。

我如何调试这些 MISS 发生的原因?我如何确定未命中是否是由于驱逐、到期、某些流氓头球等造成的?Nginx 是否为此提供命令?

编辑:完整配置

    # at http level
    proxy_cache_path  /var/lib/nginx/cache  levels=1:2 inactive=400d keys_zone=staticfilecache:180m  max_size=700m;
    proxy_temp_path /var/lib/nginx/proxy;
    proxy_connect_timeout 30;
    proxy_read_timeout 120;
    proxy_send_timeout 120;
    #prevent header too large errors
    proxy_buffers 256 16k;
    proxy_buffer_size 32k;
    #httpoxy exploit protection
    proxy_set_header Proxy "";

    # at server level 
    add_header Cache-BYPASS-Reason $skip_reason;

    # define nginx variables …
Run Code Online (Sandbox Code Playgroud)

nginx cache reverse-proxy

7
推荐指数
2
解决办法
1万
查看次数