Re: Проблема кеширования медленного удаленного фронтэнда

burguyd nginx-forum на nginx.us
Пт Июл 15 06:27:09 UTC 2011


Все сконфигурирови по приведенным выше
рекомендациям. Скорость существенно
возросла, однако при включении
дополнительных поддоменов появилась
новая проблема. 
Через несколько минут, после запуска
nginx ПО ВСЕМ адресам вида *.brsu.by начинает
грузится один из доменов третьего
уровня. После очистки кеша и
перезапуска nginx несколько минут все
работает нормально, а потом опять фейл.

Конфиг nginx:

# Пользователь UID/GID которого будет
использоваться, если был запущет от
рута
user _nginx;

# Количество рабочих процессов.
Рекомендуется устанавливать равным
колличеству ядер
# Умножается на значение параметра
worker_connections в секции events
worker_processes 2;

# Пишем логи об ошибках
# Первым значением параметра должен
быть путь к файлу, вторым
(необязательным) - уровень детализации
# Уровни детализации (в порядке
увеличения): debug, info, notice, warn, error, crit.
error_log /var/log/nginx/error.log warn;

# В секции events настраивается подведение
Nginx относительно сетевых соединений
events {

# (worker_connections) X (worker_processes) = максимально
возможное количество одновременных
соединений к серверу
	worker_connections 1024;

# Метод обработки соединений. kqueue -
эффективный метод, используемый в BSD
	use kqueue;
}

# Секция описания виртуальных хостов
http {

# Подключаем таблицу соответствий
расширений и MIME-типов ответов
	include mime.types;

# MIME-тип выдаваемый сервером по
умолчанию
	default_type application/octet-stream;

# Cбрасываем соединение по таймауту.
Сброс делается следующим образом .
# перед закрытием сокета для него
ставится опция SO_LINGER с таймаутом 0.
# После чего при закрытии сокета
клиенту отсылается пакет RST, а всё
память, связанная с этим сокетом,
освобождается.
#Это позволяет избежать длительного
нахождения уже закрытого сокета в
состоянии FIN_WAIT1 с заполненными
буферами.
	reset_timedout_connection on;

# Отправляем данные в сеть, минуя этап
их копирования в адресное пространство
приложения
	sendfile on;

# Разрешаем передачу заголовка ответа и
начала файла в одном пакете, а также
файлa в полных пакетах
	tcp_nopush on;

# Разрешаем отдравку данных без
задержек, за счет отправки "неполных"
пакетов
	tcp_nodelay on;

# Таймаут, в течение которого keep-alive
соединение с клиентом не будет закрыто
со стороны сервера
# Для сайтов, активно использующих AJAX,
соединение лучше держать подольше
# Для статических страничек, которые
пользователи будут долго читать,
соединение лучше разрывать пораньше
	keepalive_timeout 65;

# Включаем сжатие #
# Разрешаем сжатие ответов методом gzip
	gzip on;

# Число и размер буферов, в которые
будет сжиматься ответ
	gzip_buffers 16 8k;

# Устанавливает уровень сжатия от 1 до 9
	gzip_comp_level 6;

# Отключаем компрессию для шестого
осла
	gzip_disable "msie6";

# Минимальный размер сжимаемых файлов
	gzip_min_length 500;

# Устанавливает минимальную версию HTTP
запроса для сжатия ответа
	gzip_http_version 1.1;

# Разрешает или запрещает сжатие для
проксированных запросов в зависимости
от запроса и ответа.
# То что, запрос проксированный,
определяется на основании строки "Via" в
заголовке запроса.
	gzip_proxied any;

# Разрешает сжатие для указанных
MIME-типов в дополнение к "text/html". "text/html"
сжимается всегда.
	gzip_types text/plain text/css application/x-javascript text/xml
application/xml application/xml+rss text/javascript;

# Разрешает выдавать в ответе строку
заголовка "Vary: Accept-Encoding"
	gzip_vary on;

# Включаем проксирование #
#размер буфера, в который будет
читаться первая часть ответа,
получаемого от проксируемого сервера.
	proxy_buffer_size 4k;

#разрешаем использовать буферизацию
ответа проксируемого сервера
	proxy_buffering on;

# число и размер буферов для одного
соединения, в которые будет читаться
ответ, получаемый от проксируемого
сервера.
	proxy_buffers 4 32k;

# Ключ кеша
	proxy_cache_key "$scheme$proxy_host$uri$is_args$args";

# Зона для кеширования
	proxy_cache_path /home/nginx-cache levels=1:2 keys_zone=my_cache:1024m
max_size=3092m inactive=2h;

# зона для кэширования
	proxy_cache my_cache;

# число запросов, после которого ответ
будет закэширован.
	proxy_cache_min_uses 1;

# время кэширования для разных ответов
	proxy_cache_valid 200 2h;

# если ваш скрипт отдал одну из
описанных ошибок, использовать вариант
из кеша
	proxy_cache_use_stale 	 updating error timeout invalid_header http_500
http_502 http_503 http_504 http_404;

# таймаут для соединения с
проксированным сервером 60 секунд
	proxy_connect_timeout 60;

# разрешает передавать от
проксируемого сервера клиенту sid в Cookie
	proxy_pass_header Cookie;

# закрывать соединение с
проксированным сервером в случае, если
клиент закрыл соединение, не
дождавшись ответа.
	proxy_ignore_client_abort off;

# передавать клиенту проксированные
ответы с кодом больше или равные 400
	proxy_intercept_errors off;

#Не меняем заголовки "Location" и "Refresh" в
ответе проксируемого сервера
	proxy_redirect off;

# таймаут при чтении ответа
проксированного сервера
	proxy_read_timeout 60;

# таймаут при передаче запроса
проксированному серверу
	proxy_send_timeout 60;

# Переопределяем заголовки запросов
передаваемых проксируемому серверу
	proxy_set_header Host $host;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

# Описываем группы серверов, которые
могут использоваться в директивах
proxy_pass
	upstream backend {server 82.219.195.2:80;}

# Дальше идет описание виртуальных
серверов

# Виртуальный хост по-умолчанию.
	server {
			listen 80 default;
			server_name localhost;
			deny all;
			}


# Подключаем остальные виртуальные
сервера
	server {
			listen 80;
			server_name .brsu.by;

			location / {
					proxy_pass http://backend;
					access_log off;
				}

			location ~ /\.ht {
					deny all;
				}
			}

}

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,212034,212416#msg-212416




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