Назад | Перейти на главную страницу

Nginx client_body_in_file_only для производительности загрузки файлов

В моем приложении есть прокси-сервер nginx для моего сервера приложений (единорог).

Я пытаюсь повысить производительность загрузки файлов. Я читал, что с помощью различных методов вы можете предотвратить блокировку процессов вашего приложения во время загрузки файла. Текущая информация о том, как лучше всего подойти к этой теме, кажется трудной (см. этот вопрос).

Я пытаюсь сделать это с помощью client_body_in_file_only on; который, как я понимаю, указывает nginx буферизовать весь запрос на диск.

Что меня смущает, так это то, что даже без эту директиву я вижу в своих журналах nginx:

2014/10/10 17:41:43 [warn] 50331#0: *798 a client request body is buffered to a temporary file /usr/local/var/run/nginx/client_body_temp/0040665399, client: 127.0.0.1, server: my_site.dev, request: "POST /upload HTTP/1.1", host: "my_site.dev", referrer: "https://my_site.dev/upload"

Мне кажется, что nginx все равно буферизует загрузку файла на диск. Здесь nginx просто из коробки умный? Должен ли я все еще использовать client_body_in_file_only? Я неправильно понимаю, что здесь происходит?

Как вы могли бы улучшить производительность загрузки, сделав буферизацию nginx на диск? Каждый раз, когда принимаются байты (в лучшем случае ограничивается MTU передачи, или в худшем случае с сетевыми пакетами 1b-payload), они будут записаны на диск. Обычно стараются не запрашивать доступ грузы раз на диск, так как это медленное устройство ...

client_body_in_file_only, как указано в документации, в основном используется для отладки, когда вы хотите сохранить копию тела запросов клиентов для дальнейшего анализа. Имейте в виду, что установка его на on заставляет nginx хранить все файлы запросов не удалять их после обработки запроса. Значение clean Является ли.

Эта директива не активирует (как вы, возможно, неправильно поняли) (де) использование буферизации диска. как таковой. Вы видите, что nginx использует диск для буферизации тел запросов, потому что его буферы RAM не могут их содержать. Он предупреждает вас, потому что, скорее всего, очень плохо влияет на производительность вашего сервера.

Вы можете захотеть увеличить свой client_body_buffer_size поэтому загрузка файлов будет оставаться в ОЗУ в максимально возможной степени, прежде чем они будут записаны с минимальным количеством запросов записи на диск впоследствии.