Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Проблемы с кешированием
- To: nginx-ru <nginx-ru@xxxxxxxxx>
- Subject: Проблемы с кешированием
- From: Алферов Василий <vasilii.alferov@xxxxxxxxx>
- Date: Fri, 2 Apr 2010 16:19:09 +0545
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:received:message-id :subject:from:to:content-type:content-transfer-encoding; bh=4HEorocP4e00Y0+22MTr8haVTh7qwY2CgcBWd9g+Efs=; b=NdfNXtEV8B+ThnTTkvUYB7qFdhLpz/g+bQRJl99WWhV+dw9viICDvusDMCTwq1U6n+ dPPY1So7F1kGvL5HJWKvaIqZcv/rYV5uEEJIOUUThgy8vXgk7Ffpw2oYiy8XvJRfFePN J7Of1fxPqZmAxZ9q614n25l4GpWJVYCsMn5uk=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type :content-transfer-encoding; b=OH6Gi34LOJhA9uK5P3nRgsMtcs9yzkrzSYbrCpEU2dDhqu1W9wnTuDVt2YICWc5Ypu xX5NoMYwRTb/2RY9IC6wHGf/PFaMhTEpwjjLKx+1QRk7cX0ZxZ5k+Ht1W1lgIfe0yBrP m/7g7KLWiDYockLTXUZhdyhxQ6EEN2wFbEogw=
Добрый день!
Используем nginx 0.7.65 для нашего проекта. (~100к pageviews/сутки, до
150 мб/сек отдача файлов)
Поскольку одно из направление - файлообменник, изображения в
оформлении сайта хранятся в нами же разработанном кластерном бекэнде.
Он позволяет отдавать много больших файлов на хорошей скорости, но к
сожалению пока не удалось полностью победить некоторые задержки при
отдаче файлов.
Поэтому решили использовать nginx для кеширования картинок на веб-страничках.
Одновременно работает 2 nginxа и 6 бекэндов на разных машинах
При запросе картинок, которые нужно кешировать nginx добавляет
заголовок. Бекэнд, увидев этот заголовок возвращает либо картинку,
если она у него есть, либо x-accel-redirect на другой бекэнд, где
должна лежать эта картинка.
Все работает, но есть один неприятный баг:
периодически (примерно 1 раз в сутки) в кеш попадает вместо нужной
картинки другая.
При сверке акссесс-логов найти виновника не удалось.
Может ли это происходить из-за nginx, или может посоветуете, как лучше
отладить запросы между nginx и бекэндом?
Вот конфиг: example.com
server {
listen 80;
server_name d1.example.com d2.example.com d3.example.com;
access_log /var/log/nginx/d1-3.access.log main;
location ~ ^/([^.]+\.example.com)/files/(\d+) {
proxy_pass http://$1:80;
proxy_redirect off;
proxy_cache img;
proxy_cache_key "$3";
proxy_cache_valid 200 60m;
proxy_cache_valid 404 301 302 1m;
proxy_buffering on;
proxy_buffers 4 8k;
expires 30d;
internal;
}
location ~ /files/(\d+) {
proxy_pass http://backends/files/$1;
proxy_set_header X-CacheRequest yes;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
proxy_redirect off
proxy_cache img;
proxy_cache_key "$1";
proxy_cache_valid 200 60m;
proxy_cache_valid 404 301 302 1m;
proxy_buffering on;
proxy_buffers 32 1m;
}
location / {
proxy_pass http://apache;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
proxy_redirect off
set $m "";
set $i "";
if ( -f /etc/nginx/offline ) {
set $m T;
}
if ($remote_addr = 'ХХ.ХХ.ХХ.ХХ') {
set $i "${m}";
}
# allow from our ip address
if ($i) { break; }
# return 503 to others
if ($m) {
return 503;
}
if ($http_user_agent ~* 'MSIE') {
expires -1;
add_header Cache-Control no-cache;
add_header Pragma no-cache;
}
}
location ~* robots.txt$ {
return 404;
}
# 404, 50x
include /etc/nginx/conf.d/common/404.conf;
include /etc/nginx/conf.d/common/50x.conf;
}
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru
|