Как обслуживать кэшированные ruby-приложения из nginx, а не единорога? - PullRequest
3 голосов
/ 31 января 2012

У меня есть приложение rails 3.0, и у него хороший объем трафика, приложение работает через комбинацию Nginx и Unicorn. Дело в том, что единорог и его работники потребляют много ресурсов, и из-за характера моего приложения много записей извлекается из базы данных, тогда это похоже на обслуживание почти статических файлов, созданных с этими записями базы данных

Мне было интересно, можете ли вы генерировать статические файлы такого типа, кэшировать их, обслуживать их через nginx вместо приложения через единорога, чтобы использовать меньше ресурсов и перезагружать кеш после запроса 1000

Я начинаю свои исследования по этому поводу, я не знаю много настроек сервера, поэтому я надеюсь, что вы, ребята, посоветуете мне, это было бы здорово!

спасибо!

1 Ответ

3 голосов
/ 16 февраля 2012

Полагаю, вы имеете в виду Как мне обслуживать мои статические активы из nginx, а не из Unicorn

Я только что решил эту проблему, и вот фрагмент моего nginx.conf

# Prefer to serve static files directly from nginx to avoid unnecessary
# data copies from the application server.
try_files $uri/index.html $uri.html $uri @app;

# Set Far Future Cache on Static Assets
# All requests starting with /xyz/ where xyz is 
# one of the options below (~* == case insensitive)
location ~* ^/(images|javascripts|stylesheets)/ {
    # Per RFC2616 - 1 year maximum expiry
    # http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
    expires 1y;
    add_header Cache-Control public;

    # Some browsers still send conditional-GET requests if there's a
    # Last-Modified header or an ETag header even if they haven't
    # reached the expiry date sent in the Expires header.
    add_header Last-Modified "";
    add_header ETag "";
    break;
}

location @app { ... }

Я использую Rails 3.0.10, так что вместо этого вам нужно что-то вроде ^/assets/.Директива ~* указывает nginx выполнять регистрозависимое сравнение с учетом регистра.Кроме того, вам не нужно избегать обратной косой черты, как в других языках.

Вот документация Nginx по этому поводу: http://wiki.nginx.org/HttpCoreModule#location

...