Проблема с proxy_store/proxy_pass при не хватке места в хранилище

Andrey Zonov andrey.zonov at gmail.com
Fri Mar 13 13:48:21 MSK 2009


Добрый день.

Для снижения нагрузки на бекенды было принято решение сохранять
картинки на машинки с 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


More information about the nginx-ru mailing list