Добрый день.
Для снижения нагрузки на бекенды было принято решение сохранять
картинки на машинки с nginx-ом, регулярно чистить хранилище от самых
не популярных картинок, т.е. фактически сделать кеширование.
При не хватке места в хранилище - nginx отдаёт клиенту 200, с пустым
телом, потому что тело не может сохранить.
Можно ли как-то регулировать это поведение?
В идеале хочется: если файл не удаётся сохранить, то тело, таки
отдавать клиенту.
nginx.conf:
...
http {
...
proxy_connect_timeout 3;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 32 32k;
proxy_intercept_errors off;
proxy_next_upstream error timeout http_500;
proxy_store_access user:rw group:rw all:r;
proxy_temp_path /place/nginx/cache/spool 1 2;
upstream p0 {
server w1.xxx.ru:5555;
server w2.xxx.ru:5555;
...
}
...
server {
listen *:80 default;
server_name localhost;
#-- main
location / {
if ( $request_uri ~
^/img\?id=([0-9])[0-9]*&rep=([0-9]) ) {
set $hash $1;
set $rep $2;
}
error_page 404 = @try;
}
#-- try local file
location @try {
root /place/nginx/cache/$rep/$hash;
access_log /place/nginx/access_$rep.log
stat;
try_files $request_uri @proxy$rep;
}
#-- proxy0
location @proxy0 {
access_log /place/nginx/access_proxy_
$rep.log stat;
proxy_store
/place/nginx/cache/$rep/$hash$request_uri;
proxy_pass http://p0;
}
...
}
Если отключить proxy_buffering, то proxy_store совсем перестаёт
работать :(
--
Andrey Zonov