open_file_cache + proxy_store

umask umask на yandex.ru
Сб Дек 12 15:21:18 MSK 2009


Добрый день,

есть такая схема.
1-й nginx живёт на одном сервере, 2-й на другом.

Юзеры приходят за файлами на 1-й сервер и им отдаёт их 1-й nginx вот с такими настройками:

server {
                listen 80;
                server_name _;
		location / {
			root /var/lib/nginx/tmp/static.blabla.ru_proxy_store;
#			open_file_cache max=32768 inactive=45s;
#			open_file_cache_min_uses 4;
#			open_file_cache_valid 15;
#			open_file_cache_errors  on;
			open_file_cache_errors  off;
			error_page      404 = /fetch$uri;
		}

		location /fetch {
			internal;
			proxy_pass http://192.168.10.3/static.blabla.ru/;
			proxy_set_header   X-Real-IP        $remote_addr;
			proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
			proxy_store             on;
			proxy_store_access      user:rw group:rw        all:r;
			proxy_temp_path /var/lib/nginx/tmp/static.blabla.ru_tmp;
			alias   /var/lib/nginx/tmp/static.blabla.ru_proxy_store;
		}

}

Есть 2-й сервер с такими вот настройками nginx:
server {
		listen 80;
		server_name _;
                root /local/www;
		location /static.blabla.ru {
			alias /local/www/static.blabla.ru/htdocs;
		}
}


Логика простая: если у 1-го nginx'а ничего нет, то он идёт на 2-й, где есть всё что нужно.


Но, хотелось бы усложнить логику так:
- если к нам пришли на 1-й nginx за файлом и его у нас нет, то сходить на 2-й nginx и если там этого файла тоже нет, то закешировать ошибку, что файла нигде нет и в течение open_file_cache_valid не отбращаться на c 1-го nginx на 2-й.

На самом деле машин с nginx'ом 1-го вида довольно много, а машин с nginx 2-го вида очень мало. Поэтому, если вдруг случится так, что будет на некоторой странице сайта ссылки на несуществующий файл, то машины 2-го вида будут прилично загружены обращениями к несуществующим файлам. Хочется избежать этого.


Подскажите, как этого добиться?



Подробная информация о списке рассылки nginx-ru