Ряд параметров может существенно повысить эффективность отдачи файлов.
sendfile on;
Позволяет вместо 2-х системных вызовов read() и write() использовать один sendfile() при чтении файла с диски и отдаче его через tcp-сокет.
tcp_nopush on;
Разрешает или запрещает использование параметра сокета TCP_NOPUSH во FreeBSD или TCP_CORK в Linux. Параметр включаются только при использовании sendfile. Включение параметра позволяет
- передавать заголовок ответа и начало файла в одном пакете в Linux и во FreeBSD 4.*;
- передавать файл полными пакетами.
keepalive_timeout 65;
Время жизни клиентской сессии. Позволяет сэкономить на инициализации нового соединения в течение установленного в секундах интервала.
tcp_nodelay on;
Используется только вместе с директивой keepalive_timeout. При отдаче последнего неполного пакета в незакрывающемся соединении может возникнуть задержка. Чтобы её избежать и нужен TCP_NODELAY.
directio 4m;
Директива позволяет использование флагов O_DIRECT (FreeBSD, Linux), F_NOCACHE (Mac OS X) или directio() функцию (Solaris) для чтения файлов больше указанного размера. Она отключает использование sendfile() для запроса. Полезна для отдачи файлов большого размера.
expires 30d;
Директива управляет содержанием полей “Expires” и “Cache-Control”. при условии, что код ответа равен 200, 201, 204, 206, 301, 302, 303, 304 или 307. В качестве параметра можно задать положительное или отрицательное время. Параметр off запрещает добавлять или менять поля “Expires” и “Cache-Control” в заголовке ответа.
limit_rate
Это достаточно важная опция. Она позволяет ограничить скорость отдачи файлов. В том случае, если Вы отдаете потоковое видео, либо музыку, Вам следует установить ограничения на скорость отдачи. Это позволит сэкономить канал и обслужить больше клиентов:
limit_rate 196K;
Эта опция работает только в рамках одного запроса, а не клиента. Если Вы хотите поставить ограничение на клиента, следует использовать переменную:
set $limit_rate 196K;
В nginx также есть возможность установить порог отдачи, после которой ограничение войдет в силу. Также имеет смысл для потокового медиа:
limit_rate_after 1m;
Сначала создаём файл авторизации. Для этого с ключем -с запускаем команду:
htpasswd -c /var/www/www.example.com/.access username1 # Последующее добавление пользователей уже без ключа -с htpasswd /var/www/www.example.com/.access username2
В конфигурацию nginx добавляем следующие строки:
location / {
auth_basic "RESTRICTED ACCESS";
auth_basic_user_file /var/www/www.example.com/.access;
}