Я хочу настроить Nginx в качестве своего веб-сервера. Я хочу, чтобы файлы изображений кэшировались в памяти (RAM), а не на диске. Я обслуживаю небольшую страницу и хочу, чтобы несколько изображений всегда обслуживались из ОЗУ. Я не хочу использовать Varnish (или другие подобные инструменты) для этого, так как считаю, что Nginx может кэшировать содержимое в ОЗУ. Я не уверен, как мне настроить Nginx для этого? Я попробовал несколько комбинаций, но они не сработали. Nginx все время использует диск для получения изображений.
Например, когда я попробовал тест Apache для тестирования с помощью следующей команды:
ab -c 500 -n 1000 http://localhost/banner.jpg
Я получаю следующую ошибку:
socket: Too many open files (24)
Я предполагаю, что это означает, что Nginx пытается открыть слишком много файлов одновременно с диска, а ОС не позволяет эту операцию. Кто-нибудь может предложить мне правильную конфигурацию?
Как только сервер прочитает файл с диска, он будет кэширован в оперативную память (и будет заменен другим файлом, если у вас закончилась оперативная память), проблема заключается в ограничении вашей учетной записи, вы не можете открыть столько файлов ( запустите 'ulimit -a'),
Если вы хотите изменить это ограничение - прочтите о /etc/security/limits.conf
Если это статический контент, он будет кэшироваться в памяти по умолчанию (если памяти не останется), но не nginx, а ОС - все, что останется на стороне диска, будет stat ().
Если вам нужно решение со 100% памятью, вы можете просто настроить ramdisk и обслуживать данные оттуда.
Так что я знаю, что это действительно старое, но вот оно.
Кэшированный в ОЗУ файл по-прежнему остается файлом!
Попробуйте вместо этого использовать модуль кеширования Memcached из Nginx. Но все же 1000 одновременных подключений - это огромное количество, как вы думаете, в вашем случае?