- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Все что нужно знать о DDоS-атаках грамотному менеджеру
И как реагировать на "пожар", когда неизвестно, где хранятся "огнетушители
Антон Никонов
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Добрый вечер, серчане.
Кто сможет подсказать оптимальный конфиг nginx для отдачи файлов (видео,mp4) размеров ~20-450мб? (Работает связка apache + nginx).
Может подскажете, если что не так в нынешнем? Мой конфиг:
# Число рабочих процессов nginx, рекомендуется ставить по количеству процессоров/ядер на вашем сервере
worker_processes 4;
# Расположение PID файла Nginx
pid /var/run/nginx.pid;
# Уменьшаем число системных вызовов gettimeofday(), приводит к увеличению производительности
timer_resolution 100ms;
# Изменяем ограничение на число используемых файлов RLIMIT_NOFILE для рабочего процесса.
worker_rlimit_nofile 8192;
# Директива задаёт приоритет рабочих процессов от -20 до 20 (отрицательное число означает более высокий приоритет).
worker_priority -5;
events {
worker_connections 1024;
use kqueue;
}
http {
include /usr/local/etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] $status '
' "$request" $body_bytes_sent "$http_referer" '
' "$http_user_agent" "http_x_forwarded_for" ';
access_log /var/log/nginx/access.log main;
# Включить sendfile(). Экономит системные вызовы, уменьшает число копирований данных, позволяет использовать меньше физической памяти.
sendfile on;
# Задаём таймаут, в течение которого keep-alive соединение с клиентом не будет закрыто со стороны сервера. Второй параметр задаёт значение в строке "Keep-Alive: timeout=время" в заголовке ответа.
keepalive_timeout 30;
#Включить TCP_CORK в Linux, это позволяет передавать заголовок ответа и начало файла в одном пакете в Linux
tcp_nopush on;
# Разрешаем использовать TCP_NODELAY.
tcp_nodelay on;
# Включить прямое чтение без обращение в кеш операционной системы
# directio 10m;
# кеширование на браузере, если есть вероятность того, что один и тот же пользователь сможет несколько раз запросить один и тот же файл
# expires max;
# Запрещаем выдавать версию nginx'а в сообщениях об ошибках и в строке заголовка ответа "Server".
server_tokens off;
# Разрешаем сжатие ответа gzip.
gzip on;
# Разрешаем проверку готового сжатого файла.
gzip_static on;
# Устанавливаем уровень сжатия ответа методом gzip.
gzip_comp_level 5;
# Устанавливаем минимальную длину ответа, для которых будет выполняться сжатие ответа методом gzip
gzip_min_length 1024;
# Директива описывает зону, в которой хранятся состояния сессий. Выделим 10 мегабайт что хватит на 320000 состояний
limit_zone myzone $binary_remote_addr 100m;
# Далее описываем сервер
server {
# Задаём максимальное число одновременных соединений для одной сессии.
limit_conn myzone 10;
# Задаем порт
listen 80;
# Директива server_name _; говорит о том, что мы задаем ЛЮБОЙ хост
server_name _;
# Запрещаем использовать в редиректах, основное имя сервера
server_name_in_redirect off;
# Задаем файл лога
access_log /var/log/nginx/host.access.log main;
location / {
# Задаем адрес и порт где будет находиться apache
proxy_pass http://127.0.0.1:8090/;
# Директива задаёт текст, который нужно изменить в строках заголовка "Location" и "Refresh" в ответе проксируемого сервера.
proxy_redirect off;
# Добавляем строки заголовка запроса, передаваемые проксируемому серверу.
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# Задаем максимально допустимый размер тела запроса клиента
client_max_body_size 100m;
# Задаём размер буфера для чтения тела запроса клиента
client_body_buffer_size 1028k;
# Задаём таймаут для соединения с проксированным сервером
proxy_connect_timeout 30;
# Задаём таймаут при передаче запроса проксированному серверу
proxy_send_timeout 90;
# Задаём таймаут при чтении ответа проксированного сервера
proxy_read_timeout 90;
# Задаём размер буфера, в который будет читаться первая часть ответа, получаемого от проксируемого сервера.
proxy_buffer_size 4k;
# Задаём число и размер буферов для одного соединения, в которые будет читаться ответ, получаемый от проксируемого сервера.
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 100m;
} # location
location /secure {
#set $limit_rate 496K;
#limit_rate_after 1m;
root /usr/www.xxx.xx/www;
internal;
mp4;
}
} # server
} # http
Заранее благодарю за ответы.
---------- Post added 04-03-2012 at 21:43 ----------
И еще одна проблема. Как ограничить канал www-хоста?
не вижу включеного aio в нгинксе
и что б сервер держал такой траф, нужно много памяти + желательно 4 диска в зеркальный рейд
(но это зависит, сколько контента будет серв отдавать)
тут ньюансы есть, надо конфиг сервер знать и скоко контента будет отдаваться, что б прикинуть возможности
---------- Добавлено 04.03.2012 в 23:14 ----------
да и стриминговые сервера лучше держать отдельно от скриптов
Да, aio тут будет очень полезен. И sendfile off.
Кстати, у меня на отдачу больших файлов в гигабитный канал лучшего результата удалось достичь с lighttpd, а не с nginx'ом.
И еще одна проблема. Как ограничить канал www-хоста?
В nginx - limit_rate или $limit_rate
А если всего вебсервера, то можно приоритезацию трафика использовать, типа htb.init
не вижу включеного aio в нгинксе
и что б сервер держал такой траф, нужно много памяти + желательно 4 диска в зеркальный рейд
(но это зависит, сколько контента будет серв отдавать)
тут ньюансы есть, надо конфиг сервер знать и скоко контента будет отдаваться, что б прикинуть возможности
---------- Добавлено 04.03.2012 в 23:14 ----------
да и стриминговые сервера лучше держать отдельно от скриптов
Спасибо, попробую включить aio. И отключить sendfile.
Трафик вебсайта сейчас - 8000-13000 уник. посетителей в сутки. Просмотров около 15000-25000.
Что касается сервера:
ОС - 7.3-RELEASE-p7
4 ядра по 2,4 ГГц
RAM 16 Гб DDR3
HDD 4x1000 GB SATA II
Пока занято места около 1 ТБ.
Есть видео и больше 600мб, но я такие планирую разбить на 2-3 части.
Поставил memcache, eAccelerator 0.9.6.1.
Да, aio тут будет очень полезен. И sendfile off.
Кстати, у меня на отдачу больших файлов в гигабитный канал лучшего результата удалось достичь с lighttpd, а не с nginx'ом.
В nginx - limit_rate или $limit_rate
А если всего вебсервера, то можно приоритезацию трафика использовать, типа htb.init
Насчет ограничения вебсервера:
Просто у меня 2 раза уже сервер фактически зависал из-за полной забитости канала.. В nginx, видимо, можно ограничивать скорость только отдельно взятого клиента. А мне нужно либо вебсервера, либо виртуального хоста..
Спасибо, почитаю про htb.init.
Насчет aio и sendfile понятно все, а какие параметры посоветуете поставить для:
output_buffers 256 512k; # зная размер и примерное количество одновременно отдаваемых файлов, можно подобрать более подходящие значения
странно, что б так мало пользователей могли забить канал в 1 гигабит, наверно limit_rate не срабатывает или он неверно прописан
Насчет ограничения вебсервера:
Просто у меня 2 раза уже сервер фактически зависал из-за полной забитости канала.. В nginx, видимо, можно ограничивать скорость только отдельно взятого клиента. А мне нужно либо вебсервера, либо виртуального хоста..
ограничивать скорость для веб-сервера, будет не самая лучшая идея)
всё таки правильнее резать скорость каждому клиену который смотрит видео до нужного битрейта
"output_buffers 256 512k; # зная размер и примерное количество одновременно отдаваемых файлов, можно подобрать более подходящие значения" - с статьи с хабра? )
я б рекомендовал что-то вроде output_buffers 2 256k; ;)
ну и read_ahead не забыть
Насчет ограничения вебсервера:
Просто у меня 2 раза уже сервер фактически зависал из-за полной забитости канала.. В nginx, видимо, можно ограничивать скорость только отдельно взятого клиента. А мне нужно либо вебсервера, либо виртуального хоста..
Цитита из документации по nginx, limit_rate:
Если необходимо ограничить скорость для части клиентов на уровне сервера, то директива limit_rate для этого не подходит. Вместо этого следует задать желаемое ограничение скорости в переменной $limit_rate:
server {
if ($slow) {
set $limit_rate 4k;
}
...
}