Віддача файлів c допомогою nginx

Nginx часто використовується тільки для віддачі файлів. Наприклад, файловий хостинг. На що слід звернути увагу для оптимальної настройки Nginx під віддачу великих файлів?

Що слід налаштувати?

Як зазвичай працює Web сервер, при передачі файлу:
  1. відкривається вихідний файл (на диску)
  2. відкривається файл призначення (мережеве з'єднання)
  3. читається блок даних, копіюється в буфер і передається за призначенням, поки не досягнуто кінець файлу
  4. закриваються обидва файли

tcp_nopush

Директива дозволяє або забороняє використовувати опції TCP_NOPUSH у FreeBSD або TCP_CORK в Linux. "Tcp_nopush on" корисно для sendfile (), nginx в цьому випадку виводить дані повними пакетами. Після того, як весь запит оброблений, TCP_CORK / TCP_NOPUSH вимикається, що призводить в скиду останнього неповного пакета.

tcp_nodelay

Директива дозволяє або забороняє використовувати опцію TCP_NODELAY (при переході з'єднання в стан keep-alive). Перед переходом з'єднання в keepalive nginx виводить дані викликами writev () досить великими порціями для заповнення пакета ( "postpone_output 1460"), тому дані повинні йти без затримок і TCP_NODELAY не потрібен. А ось з останнім неповним пакетом може трапиться невелика затримка, якщо з'єднання не закривається. Для цього і потрібно включити TCP_NODELAY:

Ця опція дозволяє включити пряме читання без звернення до кеш операційної системи. Це корисно для великих файлів, оскільки операційний кеш для них малоефективний. Опція ви можете встановити мінімальний розмір для включення режиму прямого читання:

Оскільки ми маємо справу зі статичними файлами, і є ймовірність того, що один і той же користувач зможе кілька разів запросити один і той же файл, слід включити клієнтське кешування. Це досягається установкою опції "expires max", яка відправить браузеру потрібні заголовки:

limit_rate

# Обмежуємо швидкість віддачі до 196Кб / с

Ця опція працює тільки в рамках одного запиту, а не клієнта. Якщо Ви хочете поставити обмеження на клієнта, слід використовувати змінну:

У Nginx також є можливість встановити поріг віддачі, після якої обмеження увійде в силу. Також має сенс для потокового медіа (в цьому випадку перша зазначена частина буде віддаватися без обмежень):

# Обмеження швидкості віддачі буде накладатися після 1 Мб

Файли, які запитуються дуже часто має сенс кешувати в пам'яті.

Найважливіше

Невелика настройка Nginx спеціально для віддачі файлів дозволить краще використовувати ресурси кожного сервера.

Віддача файлів c допомогою nginx

Схожі статті