web-dev-qa-db-fra.com

Comment configurer NGinx pour servir du contenu statique de RAM?

Je veux configurer Nginx comme serveur Web. Je veux avoir des fichiers image mis en cache dans la mémoire (RAM) plutôt que sur le disque. Je sert une petite page et je veux que quelques images soient toujours servies de RAM. Je ne souhaite pas utiliser de vernis (ni d'autres outils de ce type) pour cela, car je pense que Nginx a une capacité de cache le contenu dans la RAM. Je ne suis pas sûr de savoir comment je peux configurer Nginx pour cela? J'ai fait quelques combinaisons, mais ils n'ont pas fonctionné. Nginx utilise le disque tout le temps pour obtenir les images.

Par exemple, lorsque j'ai essayé Apache Benchmark à tester avec la commande suivante:

ab -c 500 -n 1000 http://localhost/banner.jpg

Je reçois l'erreur suivante:

socket: Too many open files (24)

Je suppose que cela signifie NGinx essaie d'ouvrir trop de fichiers simultanément à partir du disque et du système d'exploitation ne permet pas à cette opération. Quelqu'un peut-il me suggérer une configuration correcte?

11
Vijayendra

Une fois que le serveur a lu un fichier sur le disque, il sera mis en cache à la RAM (et sera remplacé par Diffrent Fichier si vous êtes hors de RAM), le problème est avec la limite de votre compte, vous ne pouvez pas ouvrir autant de fichiers ( courir 'ulimit -a'),

Si vous souhaitez modifier cette limite - lisez sur /etc/security/limits.conf

9
Avi Keinan

Donc je sais que c'est vraiment vieux mais voilà.

  1. Nginx ne fait pas de mémoire en mémoire de la boîte, vous voudrez regarder Memcache pour cela, je recommanderais l'open de l'open de cette option pour ceci: http://openresty.org/. Ce que vous sortez de la boîte (comme il a été répondu ci-dessus est le cache de page)
  2. Ce message d'erreur, je suis presque certain, vient d'AB non de Nginx, Nginx erreurs pour les limites de fichiers ressemblent à ceci "Échec (24: Trop de fichiers ouverts)". N'oubliez pas que dans UNIX Sockets sont également des fichiers, alors pour l'utilisateur que vous utilisez AB, doit avoir son ulmimit ajusté pour cette session pour exécuter AB. Comme vous avez dit que votre limite était de 256 ans, vous demandez à AB d'utiliser 500 connexions, cela maximum de votre limite.
7
Ben Whitaker

Un fichier mis en cache de fichier RAM est toujours un fichier!

Essayez d'utiliser le module de cache Memcached de NGinx à la place. Mais toujours, 1000 connexions simultanées sont énormes, pensez-vous que votre cas est votre cas?

2
Thomas Decaux