Est-il possible de servir précompilés actifs avec nginx directement? Portion de l'actif de manière dynamique avec des Rails, c'est comme 20 fois plus lent (4000 req/sec vs 200 req/sec dans ma virtualbox).
Je suppose que cela peut être fait avec une certaine règle de réécriture dans nginx.conf. Le problème est, cependant, que ces fichiers comprennent du hachage md5 du contenu, donc je ne comprends pas vraiment ce qui peut être fait avec ce.
Si ce n'est pas possible je n'ai pas l'idée de Rails 3.1 actif pipelines. Réduction de la bande passante des clients et des temps de chargement de page, au prix de x20 charge du serveur?
Des idées?
UPD: Alors, j'ai réussi à configurer mon nginx et des Rails d'un chemin, quand tout dans mon application est servi à la vitesse d'environ 3500 à 4000 requêtes/sec.
Tout d'abord, j'ai ajouté deux hôtes virtuels, avec une servant de proxy cache à l'autre et a découvert que les actifs sont servis à la vitesse que je voulais (4k). Puis je l'ai connecté mon application Rails avec memcached (rien de spécial jusqu'à présent, une seule ligne dans l'application.rb: ActionController::Base.cache_store = :mem_cache_store, "localhost"
)
Ensuite, j'ai ajouté des choses comme expires_in 1.hour, :public => true if !signed_in?;
de mes contrôleurs à défaut de changement politique de mise en cache des Rails de contenu et a obtenu gain de vitesse autour de 500 requêtes par seconde pour mes pages dynamiques (avant que c'était quelque chose près de 200, et il était d'environ 50 avant que j'aie commencé tout cela).
Maintenant, quand mon nginx fichiers de configuration ressembler à ceci:
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;
}
Tout est rapide comme un putain de foudre :) Merci, les gars.