我有 FreeBSD 服务器,使用 nginx 作为反向代理。
当我用 ab util 测试它时,我发现一些奇怪的事情,例如:
- 内部页面未被缓存。
- 主页已缓存,但有时会返回非缓存版本。
我不知道我哪里犯了错误。请帮帮我。
这是配置的一部分:
worker_processes 4;
events {
worker_connections 4096;
}
http {
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 200;
proxy_buffer_size 4m;
proxy_buffers 24 1m;
proxy_busy_buffers_size 8m;
proxy_temp_file_write_size 4m;
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=all:512m;
keepalive_timeout 65;
reset_timedout_connection on;
aio sendfile;
directio 1M;
output_buffers 64 256k;
server {
listen < hidden >;
server_name < hidden >;
error_page 412 = @fallback;
proxy_cache_key "$host$request_uri";
proxy_cache_valid 404 5m;
proxy_cache_valid 500 501 502 503 504 1m;
proxy_cache_valid any 10m;
proxy_cache_use_stale http_502 http_503 http_504;
proxy_cache_bypass $cookie_logined;
proxy_no_cache $cookie_logined;
location / {
if ($cookie_logined) { return 412; }
proxy_cache all;
proxy_pass < hidden >;
proxy_redirect < hidden > /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
答案1
我觉得你还没有完全理解缓存是怎么工作的。缓存的关键参数比如:
- proxy_cache_key
- 代理缓存锁
- proxy_cache_lock_timeout
- proxy_cache_methods
- proxy_cache_bypass
- proxy_cache_valid
我认为默认值会产生这种效果。阅读本部分文档。