nginx 反向 http 代理不缓存 php 生成的图像

nginx 反向 http 代理不缓存 php 生成的图像

我正在测试在 nginx 中创建缓存,并且它在我设置的两个目录下都运行良好,但以下情况除外:当我尝试缓存 php 生成的图像时,它只是充当运行 php 图像生成脚本的 apache 服务器的代理。它在任何静态 html、css、js 或文本文件上都能正常工作。我如何让 nginx 也缓存 php 生成的图像?我想我的 PHP 生成中可能缺少一些东西,无法让 nginx 认为它是一个可缓存的文件,但不确定接下来该怎么做。

这是我的 nginx.conf:

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

events {
        worker_connections 768;
        # multi_accept on;
}

http {
  proxy_cache_path  /var/www/cache/muncherelli/cdn levels=1:2 keys_zone=muncherelli:8m max_size=1000m inactive=600m;
  proxy_cache_path  /var/www/cache/mi/client/images levels=1:2 keys_zone=miclient:8m max_size=1000m inactive=600m;
  proxy_temp_path /var/www/cache/tmp;


  server {
    location /muncherelli/cdn/ {
      proxy_pass http://muncherelli.com/wp-content/;
      proxy_cache muncherelli;
      proxy_cache_valid  200 302  60m;
      proxy_cache_valid  404      1m;
    }

    location /mi/client/images/ {
      proxy_pass http://client.images.example.com/;
      proxy_cache miclient;
      proxy_cache_valid  200 302  60m;
      proxy_cache_valid  404      1m;
    }
  }

}

以及我的 php 脚本的图像创建部分:

$img = imagecreatefromjpeg($full_image_path);

header('Content-Type: image/jpeg');
imagejpeg($img);
imagedestroy($img);

我如何让 nginx 也缓存这些图像?

答案1

最有可能的是,一些额外的标头阻止了 nginx 缓存响应。

答案2

我也必须添加我的答案,我已经调试了两个星期(不幸的是,这是真的)。

php 页面(或其他页面)默认setcookie()不会缓存在 nginx 缓存/反向代理中。

我在每个列表详细信息页面(超过 500 000 个)上都有一个 cookie“login_return_url”,我不明白为什么尽管缓存显然工作正常,但网站似乎速度更慢,流量越来越少,谷歌点击率也越来越低。

而且我大部分时间都处于登录状态(不需要登录返回 cookie),因此我获得了缓存页面,而其他人没有。

谢谢@muncherelli!

相关内容