Вирішив додати на свій сайт SPDY – новий швидший протокол, заміна HTTP. Намучився, але таки поставив, ділюсь досвідом :).

Підтримують SPDY вже всі нормальні браузери, крім сафарі - а значить можна сміло юзати.

Виявилось, що для SPDY потрібен SSL, тобто щоб сайт працював по HTTPS. Плюс в тому що ніби-то сайт вважається безпечним і біля нього тепер стоїть іконка колодки, а головний мінус в тому, що швидкість завантаження сторінок менша в 2 рази, за рахунок криптування всіх даних, правда із спіді швидкість мала б збільшитись.

Щоб поставити SSL зареєструвався на StartSSL і згенерував собі ключі, видали мені безплатно сертифікат для lukom.org, правда якщо захочу його перегенерувати то доведеться вже гроші платити, такий от там безплатний сир в мишоловці..

Потім попарився з настройкою Nginx - для того щоб підтримувався найостанніший SPDY 3.1 потрібен Nginx > 1.5, та ще й скомпілений із новим OpenSSL, який не вразливий на HeartBleed, і спеціальною опцією --with-http_spdy_module. Для цього обновив Nginx із джему Passenger`а, згрубша десь так:

gem install passenger
rvmsudo passenger-install-nginx-module
vim /etc/init.d/nginx # see https://github.com/JasonGiedymin/nginx-init-ubuntu
chmod +x nginx
/etc/init.d/nginx start

І потім зібрав Nginx з підтримкою SPDY. Прописав настройки:

server {
  listen 80;
  listen 443 default_server ssl spdy;
  ssl_certificate /root/ssl/lukom.org_chain.pem;
  ssl_certificate_key /root/ssl/lukom.org.key;
}

Також, оскільки мій сайт на RoR, додав в production.rb наступне:

config.force_ssl = true

Щоб сайт редіректило по-замовчуванню з http на https.

І ура, SPDY працює! Це можна перевірити на SpdyCheck.org, або поставити SPDY Indicator для хрома, або додавши таку штуку в конфіги Nginx:

location /spdy {
  return 200 $spdy;
}

Після цього виплили деякі нюанси - якщо на сторінці є якісь ресурси, в яких лінк починається на «http://» то іконка сайту в адресному рядку стає із знаком оклику, і в консоль хрома пишуться адреси ресурсів які завантажуються не по https. В мене такі проблеми були з Google Custom Search та з картинками лічильників. З гуглівським пошуком довелось просто оновити код, а от для лічильників довелось писати проксі:

def topua_rating_img
  proxy_image('http://top.topua.net/counter.php?site=36&t=5&c=1', false)
end
def topua_bloggers_img
  proxy_image('http://top.blog.net.ua/tracker.php?do=in&id=457', false)
end
def feedburner_img
  proxy_image('http://feeds.feedburner.com/~fc/lukomorg?anim=0', true)
end

private

def proxy_image(url, caching)
  image = Net::HTTP.get_response(URI url)
  if caching
    response.headers['Expires'] = 1.day.from_now.httpdate
  else
    response.headers['Cache-Control'] = 'no-cache, no-store, max-age=0, must-revalidate'
    response.headers['Pragma'] = 'no-cache'
    response.headers['Expires'] = 'Fri, 01 Jan 1990 00:00:00 GMT'
  end
  send_data image.body, type: image.content_type, disposition: 'inline'
end

От і все, сайт на супер-нових технологіях, блищить і сяє :)