Можно ли обслуживать предварительно скомпилированные активы с помощью nginx напрямую?Динамическое обслуживание ресурсов с помощью Rails примерно в 20 раз медленнее (4000 рэк / сек против 200 рэк / сек в моей виртуальной коробке).
Я думаю, это можно сделать с помощью некоторого правила перезаписи в nginx.conf.Проблема, однако, в том, что эти имена включают в себя хэш содержимого md5, поэтому я не совсем понимаю, что можно сделать с этим.
Если это невозможно, я не получаю полной идеи с Rails3.1 Актив трубопроводов.Сокращение пропускной способности клиента и времени загрузки страницы за счет нагрузки на сервер x20?
Есть идеи?
UPD: Итак, мне удалось настроить nginx и Rails таким образом, когда все в моем приложении обслуживается со скоростью ~ 3500-4000 запросов / сек.
Прежде всего я добавил два виртуальных хоста, один из которых служил прокси-сервером для кэширования, и обнаружил, что ресурсыслужил на скорости, которую я хотел (4k).Затем я связал свое приложение Rails с memcached (пока ничего особенного, только одна строка в application.rb: ActionController::Base.cache_store = :mem_cache_store, "localhost"
)
Затем я добавил в контроллеры такие вещи, как expires_in 1.hour, :public => true if !signed_in?;
, чтобы изменить политику кэширования по умолчанию в Railsсодержимое и скорость работы увеличились примерно на 500 запросов в секунду для моих динамических страниц (до этого это было что-то около 200, а до того, как я все это начал, было ~ 50).
Теперь, когда моя конфигурация nginxфайлы выглядят так:
nginx.conf:
...
proxy_cache_path /tmp/blog keys_zone=one:8m max_size=1000m inactive=600m;
proxy_temp_path /tmp;
gzip off;
include /opt/nginx/conf/sites-enabled/*;
sites-enabled / blog:
server {
listen 8080;
server_name blindsight;
root /home/mike/rails/blog/public;
rails_env production;
# serve static content directly
location ~* \.(ico|jpg|gif|png|swf|html)$ {
if (-f $request_filename) {
expires max;
break;
}
}
passenger_enabled on;
location ~ /\.ht {
deny all;
}
}
sites-enabled / main:
server {
listen 80;
server_name blindsight;
location /authorize
{
proxy_pass_header Cookie;
proxy_pass_header Set-Cookie;
proxy_pass http://127.0.0.1:8080;
}
location /admin
{
proxy_pass_header Set-Cookie;
proxy_pass_header Cookie;
proxy_pass http://127.0.0.1:8080;
}
location / {
root /home/mike/rails/blog/public;
# All POST requests go directly
if ($request_method = POST) {
proxy_pass http://127.0.0.1:8080;
break;
}
proxy_redirect off;
proxy_pass_header Cookie;
proxy_ignore_headers Set-Cookie;
proxy_hide_header Set-Cookie;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache one;
proxy_cache_key blog$request_uri;
proxy_cache_valid 200 302 5s;
proxy_cache_valid 404 1m;
proxy_pass http://127.0.0.1:8080;
}
Все быстро, как кровавая молния :) Спасибо, ребята.