web-dev-qa-db-ja.com

RAMから静的コンテンツを提供するようにnginxを構成するにはどうすればよいですか?

NginxをWebサーバーとして設定したい。画像ファイルをディスクではなくメモリ(RAM)にキャッシュしたい。私は小さなページを提供しており、常にRAMから提供されるいくつかの画像が必要です。 NginxにはコンテンツをRAMにキャッシュする機能があると思うので、これにはVarnish(またはその他のツール)を使用したくありません。このためにNginxをどのように設定できるかわかりませんか?いくつかの組み合わせを試しましたが、うまくいきませんでした。 Nginxは常にディスクを使用して画像を取得します。

たとえば、次のコマンドでApacheベンチマークをテストしてみました。

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

次のエラーが発生します。

socket: Too many open files (24)

これは、Nginxがディスクから同時に多くのファイルを開こうとしているため、OSがこの操作を許可していないことを意味します。誰でも私に正しい設定を提案できますか?

11
Vijayendra

静的コンテンツの場合、nginxではなく、デフォルトで(メモリが残っていない場合を除いて)メモリにキャッシュされますが、OS-ディスク側に残されるのはstat()だけです。

100%のメモリソリューションが必要な場合は、ramdiskを構成してそこからデータを提供できます。

9
c2h5oh

サーバーがディスクからファイルを読み取ると、そのファイルはRAMにキャッシュされ(RAMがなくなった場合は別のファイルに置き換えられます)、問題はアカウントの制限にあり、あまり多くのファイルを開くことができません( 'ulimit -a'を実行)、

この制限を変更したい場合-/etc/security/limits.confをお読みください

9
Avi Keinan

これが本当に古いのはわかっていますが、ここにいきます。

  1. Nginxはそのままではメモリキャッシングを実行しません。これについてはmemcacheを確認する必要があります。これにはopenrestyパックをお勧めします:http://openresty.org/。あなたが箱から出して何をするか(上記で答えられたようにページキャッシュです)
  2. そのエラーメッセージは、ほぼ間違いなく、nginxからではなくabからのものです。ファイル制限のnginxエラーは、「失敗(24:開いているファイルが多すぎます)」のようになります。 UNIXではソケットもファイルであることを忘れないでください。そのため、abを実行しているユーザーの場合、abを実行するには、そのセッションのulimitを調整する必要があります。あなたの制限が256であると言ったので、500接続を使用するようabに要求しています。これはあなたの制限を使い果たしています。
7
Ben Whitaker

RAMにキャッシュされたファイルはまだファイルです!

代わりにNginxのMemcachedキャッシュモジュールを使用してみてください。しかし、それでも1000の同時接続は巨大です、あなたはあなたのケースだと思いますか?

2
Thomas Decaux