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