NGINX z HTTP/2 oraz SPDY jednocześnie! To możliwe!

http_21

Jakiś czas temu pojawił się HTTP/2 jako nowość i innowacje w świecie Internetu ale ta innowacja wymaga przynajmniej nowszego systemu niż Windows XP 🙂

 

HTTP/2 jest największym krokiem w rozwoju HTTP (Hypertext Transfer Protocol) od 1999 roku, gdy zaadaptowano protokół z numerkiem 1.1. Upłynęło już 16 lat i nowy (przyszły) standard zawiera naprawdę wiele udoskonaleń oraz zmian. Jakich? HTTP/2 wprowadza zmiany obejmujące prędkość wczytywania stron internetowych, dłuższe połączenia czy push dla serwerów.

http://www.komputerswiat.pl

O co chodzi  w tym ? Cloudflare to przedstawia za pomocą ilustracji:

cf1https://cloudflare.com

HTTP/2 jest w  teorii szybsze od SPDY o nawet 50%, ponadto sam HTTP/2 nie wymaga stosowania certyfikatu SSL co go znacznie różni od HTTP/2 nie mniej jednak na tę chwilę SSL jest wymagany ze względu na to że przeglądarki póki co wyłącznie taka konfiguracje wspierają.

http2-27

Postaram się przedstawić kilka różnic pomiędzy HTTP/2 oraz SPDY:

SPDY HTTP/2
SSL jest wymagany. Każde połączenie w tym protokole musi być szyfrowane. SSL Nie jest wymagany. ale– na tę chwile wszystkie przeglądarki wymagają posiadania SSL’a.
Szybkie połączenia. Nie uzywane jednak jest titaj rozszeżenie ALPN Szybsze połączenia!. Dzięki zastosowaniu ALPN
Single-Host Multiplexing (Multiplex dla pojedynczego hosta) –  Multiplexing może zachodzić w połączeniu do jednego hosta w jednym czase. Multi-Host Multiplexing (Multiplex dla wielu hostów)
Kompresja danych Szybsza i bardziej bezpieczna kompresja! HTTP/2 wprowadza HPACK, co powoduje zmniejszenia “nagłówków” w zapytanaich.
Propryteryzacja zapytań. Ulepszona propryteryzacja. Pozwala ddecydowac przeglądarce jakie elementy maja miec wyższy priorytet.

 

 

http1-2-back

Jak wspomniałem na początku wpisu, szkoda pozbawiać się jeszcze aktywnego protokołu kiedy na prawdę wielu użytkowników używa starszej wersji oprogramowania na swoich smartfonach/komputerach co może skutkować problematycznym działaniem przy uruchomionym wyłącznie protokole HTTP/2, jako ze dwa protokoły nie moga siłą rzeczy działać jednocześnie – istnieje sposób aby to ominąć i tutaj należą się podziękowania dla firmy Cloudflare za udostępnienie swojego Patcha do serwera NGINX który umożliwia prace z HTTP/2 oraz SPDY.

Zbudowałem paczki dla systemów Debian 8 / Ubuntu 14.04 / Ubuntu 15.10 oraz Ubuntu 16.04 dla AMD64.

 

W samych paczkach dołączam moduły dla NGINX:

  • mail, mail_ssl_module
  • stream
  • stream_ssl_module
  • threads
  • ore-nginx-module
  • auth-pam
  • cache-purge
  • dav-ext-module
  • development-kit
  • echo
  • fancyindex
  • http-push
  • lua
  • upload-progress
  • upstream-fair
  • ubstitutions_filter
  • module-vts
  • pagespeed-1.11.33.0
  • redis2
  • srcache-nginx-module
  • memc-nginx-module
  • pcre-jit
  • with-ipv6
  • ssl_module
  • stub_status
  • realip
  • auth_request
  • addition
  • dav
  • flv
  • geoip
  • gunzip
  • gzip_static
  • image_filter
  • mp4
  • perl
  • random_index
  • secure_link
  • xslt
  • sub
  • HTTP/2 + SPDY

 

Debian 8:

apt-get update && apt-get install fontconfig-config fonts-dejavu-core libfontconfig \
libgd3 libjbig0 liblua5.1-0 libperl5.20 libtiff5 libxpm4 libxslt1.1 \
libpython-stdlib libpython2.7-minimal libpython2.7-stdlib \
python python-minimal python2.7 python2.7-minimal \
fcgiwrap ssl-cert libossp-uuid16 -y
wget http://kompilacje.linuxiarz.pl/Debian_8/nginx-linuxiarz.pl-HTTP2%2BSPDY/nginx-common_1.9.100-linuxiarz.pl_all.deb
wget http://kompilacje.linuxiarz.pl/Debian_8/nginx-linuxiarz.pl-HTTP2%2BSPDY/nginx-doc_1.9.100-linuxiarz.pl_all.deb
wget http://kompilacje.linuxiarz.pl/Debian_8/nginx-linuxiarz.pl-HTTP2%2BSPDY/nginx-extras_1.9.100-linuxiarz.pl_amd64.deb
wget http://kompilacje.linuxiarz.pl/Debian_8/nginx-linuxiarz.pl-HTTP2%2BSPDY/nginx_1.9.100-linuxiarz.pl_all.deb
dpkg -i *

Ubuntu 14.04:

apt-get update && apt-get install fontconfig-config fonts-dejavu-core libfontconfig \
libgd3 libjbig0 liblua5.1-0 libperl5.18 libtiff5 libxpm4 libxslt1.1 \
libpython-stdlib libpython2.7-minimal libpython2.7-stdlib \
python python-minimal python2.7 python2.7-minimal \
fcgiwrap ssl-cert libossp-uuid16 -y
wget http://kompilacje.linuxiarz.pl/Ubuntu%2014.04%20LTS/nginx-linuxiarz.pl-HTTP2%2BSPDY/nginx-common_1.9.100-linuxiarz.pl_all.deb
wget http://kompilacje.linuxiarz.pl/Ubuntu%2014.04%20LTS/nginx-linuxiarz.pl-HTTP2%2BSPDY/nginx-doc_1.9.100-linuxiarz.pl_all.deb
wget http://kompilacje.linuxiarz.pl/Ubuntu%2014.04%20LTS/nginx-linuxiarz.pl-HTTP2%2BSPDY/nginx-extras_1.9.100-linuxiarz.pl_amd64.deb
wget http://kompilacje.linuxiarz.pl/Ubuntu%2014.04%20LTS/nginx-linuxiarz.pl-HTTP2%2BSPDY/nginx_1.9.100-linuxiarz.pl_all.deb
dpkg -i *

Ubuntu 15.10:

apt-get update && apt-get install fontconfig-config fonts-dejavu-core libfontconfig \
libgd3 libjbig0 liblua5.1-0 libperl5.22 libtiff5 libxpm4 libxslt1.1 \
libpython-stdlib libpython2.7-minimal libpython2.7-stdlib \
python python-minimal python2.7 python2.7-minimal \
fcgiwrap ssl-cert libossp-uuid16 libluajit-5.1-2 libluajit-5.1-common -y
wget http://kompilacje.linuxiarz.pl/Ubuntu_15.10/nginx-linuxiarz.pl-HTTP2%2BSPDY/nginx-common_1.9.100-linuxiarz.pl_all.deb
wget http://kompilacje.linuxiarz.pl/Ubuntu_15.10/nginx-linuxiarz.pl-HTTP2%2BSPDY/nginx-doc_1.9.100-linuxiarz.pl_all.deb
wget http://kompilacje.linuxiarz.pl/Ubuntu_15.10/nginx-linuxiarz.pl-HTTP2%2BSPDY/nginx-extras_1.9.100-linuxiarz.pl_amd64.deb
wget http://kompilacje.linuxiarz.pl/Ubuntu_15.10/nginx-linuxiarz.pl-HTTP2%2BSPDY/nginx_1.9.100-linuxiarz.pl_all.deb
dpkg -i *

Ubuntu 16.04:

apt-get update && apt-get install fontconfig-config fonts-dejavu-core libfontconfig \
libgd3 libjbig0 liblua5.1-0 libtiff5 libxpm4 libxslt1.1 \
libpython-stdlib libpython2.7-minimal libpython2.7-stdlib \
python python-minimal python2.7 python2.7-minimal \
fcgiwrap ssl-cert libossp-uuid16 libperl5.22 -y
wget http://kompilacje.linuxiarz.pl/Ubuntu_16.04_LTS/nginx-linuxiarz.pl-HTTP2%2BSPDY/nginx-common_1.100.10-linuxiarz.pl_all.deb
wget http://kompilacje.linuxiarz.pl/Ubuntu_16.04_LTS/nginx-linuxiarz.pl-HTTP2%2BSPDY/nginx-doc_1.100.10-linuxiarz.pl_all.deb
wget http://kompilacje.linuxiarz.pl/Ubuntu_16.04_LTS/nginx-linuxiarz.pl-HTTP2%2BSPDY/nginx-extras_1.100.10-linuxiarz.pl_amd64.deb
wget http://kompilacje.linuxiarz.pl/Ubuntu_16.04_LTS/nginx-linuxiarz.pl-HTTP2%2BSPDY/nginx_1.100.10-linuxiarz.pl_all.deb
dpkg -i *
  • Patch do SPDY + HTTP/2 działa póki co z nginx 1.9.7, poźniej zaszło wiele zmian w samy kodzie. Kwestia OpenSSL jest wykonalna.

  • Patrycjusz Nowakowski

    Można liczyć na paczki z najnowszą wersją nginx i openssl’em 1.0.2?