Конфиг nginx под сервер с 1гб портом

S3
На сайте с 23.03.2009
Offline
59
4649

Добрый вечер, серчане.

Кто сможет подсказать оптимальный конфиг nginx для отдачи файлов (видео,mp4) размеров ~20-450мб? (Работает связка apache + nginx).

Может подскажете, если что не так в нынешнем? Мой конфиг:

user www www;

# Число рабочих процессов 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-хоста?

iamsens
На сайте с 26.08.2009
Offline
115
#1

не вижу включеного aio в нгинксе

и что б сервер держал такой траф, нужно много памяти + желательно 4 диска в зеркальный рейд

(но это зависит, сколько контента будет серв отдавать)

тут ньюансы есть, надо конфиг сервер знать и скоко контента будет отдаваться, что б прикинуть возможности

---------- Добавлено 04.03.2012 в 23:14 ----------

да и стриминговые сервера лучше держать отдельно от скриптов

V
На сайте с 25.07.2006
Offline
128
#2

Да, aio тут будет очень полезен. И sendfile off.

Кстати, у меня на отдачу больших файлов в гигабитный канал лучшего результата удалось достичь с lighttpd, а не с nginx'ом.

sorc39:

И еще одна проблема. Как ограничить канал www-хоста?

В nginx - limit_rate или $limit_rate

А если всего вебсервера, то можно приоритезацию трафика использовать, типа htb.init

Приватный linux-администратор
S3
На сайте с 23.03.2009
Offline
59
#3
iamsens:
не вижу включеного 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.

vapetrov:
Да, aio тут будет очень полезен. И sendfile off.
Кстати, у меня на отдачу больших файлов в гигабитный канал лучшего результата удалось достичь с lighttpd, а не с nginx'ом.


В nginx - limit_rate или $limit_rate
А если всего вебсервера, то можно приоритезацию трафика использовать, типа htb.init

Насчет ограничения вебсервера:

Просто у меня 2 раза уже сервер фактически зависал из-за полной забитости канала.. В nginx, видимо, можно ограничивать скорость только отдельно взятого клиента. А мне нужно либо вебсервера, либо виртуального хоста..

Спасибо, почитаю про htb.init.

Насчет aio и sendfile понятно все, а какие параметры посоветуете поставить для:

output_buffers 256 512k; # зная размер и примерное количество одновременно отдаваемых файлов, можно подобрать более подходящие значения

iamsens
На сайте с 26.08.2009
Offline
115
#4
Трафик вебсайта сейчас - 8000-13000 уник. посетителей в сутки. Просмотров около 15000-25000.

странно, что б так мало пользователей могли забить канал в 1 гигабит, наверно limit_rate не срабатывает или он неверно прописан


Насчет ограничения вебсервера:
Просто у меня 2 раза уже сервер фактически зависал из-за полной забитости канала.. В nginx, видимо, можно ограничивать скорость только отдельно взятого клиента. А мне нужно либо вебсервера, либо виртуального хоста..

ограничивать скорость для веб-сервера, будет не самая лучшая идея)

всё таки правильнее резать скорость каждому клиену который смотрит видео до нужного битрейта

"output_buffers 256 512k; # зная размер и примерное количество одновременно отдаваемых файлов, можно подобрать более подходящие значения" - с статьи с хабра? )

я б рекомендовал что-то вроде output_buffers 2 256k; ;)

ну и read_ahead не забыть

V
На сайте с 25.07.2006
Offline
128
#5
sorc39:

Насчет ограничения вебсервера:
Просто у меня 2 раза уже сервер фактически зависал из-за полной забитости канала.. В nginx, видимо, можно ограничивать скорость только отдельно взятого клиента. А мне нужно либо вебсервера, либо виртуального хоста..

Цитита из документации по nginx, limit_rate:

Если необходимо ограничить скорость для части клиентов на уровне сервера, то директива limit_rate для этого не подходит. Вместо этого следует задать желаемое ограничение скорости в переменной $limit_rate:

server {

if ($slow) {

set $limit_rate 4k;

}

...

}

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий