我正在测试在 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!