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