Como configurar o nginx para servir conteúdo estático da RAM?

10

Eu quero configurar o Nginx como meu servidor da web. Eu quero ter arquivos de imagem em cache na memória (RAM) em vez de disco. Estou servindo uma pequena página e quero algumas imagens sempre servidas da RAM. Eu não quero usar o Varnish (ou qualquer outra ferramenta) para isso, pois acredito que o Nginx tem a capacidade de armazenar o conteúdo em cache na RAM. Não tenho certeza de como posso configurar o Nginx para isso? Eu tentei algumas combinações, mas eles não funcionaram. Nginx usa disco o tempo todo para obter as imagens.

Por exemplo, quando experimentei o benchmark do Apache para testar com o seguinte comando:

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

Eu recebo o seguinte erro:

socket: Too many open files (24)

Acho que isso significa que o Nginx está tentando abrir muitos arquivos simultaneamente do disco e o sistema operacional não está permitindo essa operação. Alguém pode me sugerir uma configuração correta?

    
por Vijayendra 10.06.2012 / 21:06

4 respostas

8

Se for conteúdo estático, será armazenado em cache na memória por padrão (a menos que não haja mais memória), apenas não pelo nginx, mas pelo SO - tudo o que será deixado no lado do disco será stat (). / p>

Se você quiser uma solução de 100% de memória, basta configurar o ramdisk e fornecer dados de lá.

    
por 10.06.2012 / 21:28
8

Uma vez que o servidor tenha lido um arquivo do disco, ele será armazenado em cache (e será substituído por um arquivo diferente se você estiver sem memória RAM), o problema é com o limite da sua conta, você não pode abrir muitos arquivos (execute 'ulimit -a'),

Se você quiser mudar este limite - leia sobre /etc/security/limits.conf

    
por 10.06.2012 / 22:12
7

Então eu sei que isso é muito antigo, mas aqui vai.

  1. O Nginx não faz cache de memória fora da caixa, você vai querer olhar para memcache para isso, eu recomendo o pacote openresty para isso: http://openresty.org/. O que você sai da caixa (como foi respondido acima é o cache da página)
  2. Essa mensagem de erro, estou quase certo, é de ab não de nginx, erros nginx para limites de arquivos parecem com "falha (24: muitos arquivos abertos)". Lembre-se de soquetes unix são arquivos também, então para o usuário que você está executando ab como, precisa ter seu ulimit ajustado para que a sessão execute ab. Desde que você disse que seu limite era 256, você está pedindo ab para usar 500 conexões, isso está maximizando seu limite.
por 26.12.2013 / 21:12
2

Um arquivo armazenado em cache na RAM ainda é um arquivo!

Tente usar o módulo de cache Memcached do Nginx. Mas ainda assim, 1000 conexões simultâneas são enormes, você acha que é o seu caso?

    
por 03.12.2013 / 23:16