Je souhaite configurer Nginx comme mon serveur Web. Je souhaite que les fichiers image soient mis en cache dans la mémoire (RAM) plutôt que sur le disque. Je sers une petite page et je veux que quelques images soient toujours servies à partir de la RAM. Je ne souhaite pas utiliser Varnish (ou tout autre outil de ce type) pour cela, car je crois que Nginx a la capacité de mettre en cache le contenu dans la RAM. Je ne sais pas comment je peux configurer Nginx pour cela? J'ai essayé quelques combinaisons mais elles n'ont pas fonctionné. Nginx utilise tout le temps le disque pour obtenir les images.
Par exemple, lorsque j'ai essayé le benchmark Apache pour tester avec la commande suivante:
ab -c 500 -n 1000 http://localhost/banner.jpg
J'obtiens l'erreur suivante:
socket: Too many open files (24)
Je suppose que cela signifie que Nginx essaie d'ouvrir trop de fichiers simultanément à partir du disque et que le système d'exploitation n'autorise pas cette opération. Quelqu'un peut-il me suggérer une configuration correcte?
Réponses:
S'il s'agit d'un contenu statique, il sera mis en cache par défaut (sauf s'il n'y a plus de mémoire), pas par nginx, mais par OS - tout ce qui restera côté disque sera stat ().
Si vous voulez une solution de mémoire à 100%, vous pouvez simplement configurer le disque virtuel et servir les données à partir de là.
la source
Une fois que le serveur a lu un fichier sur le disque, il sera mis en cache dans ram (et sera remplacé par un fichier différent si vous n'avez plus de ram), le problème est avec votre limite de compte, vous ne pouvez pas ouvrir autant de fichiers ( exécutez 'ulimit -a'),
Si vous souhaitez modifier cette limite - lisez à propos de /etc/security/limits.conf
la source
Je sais donc que c'est vraiment vieux mais, c'est parti.
la source
Un fichier mis en cache dans la RAM est toujours un fichier!
Essayez plutôt d'utiliser le module de cache Memcached de Nginx. Mais encore, 1000 connexions simultanées sont énormes, pensez-vous que ce soit votre cas?
la source