Dokumentacija

Vklopite HTTP/2

Vklopite HTTP/2

Pri HTTP/1.1 brskalnik z ene domene hkrati prenaša največ približno šest datotek, vse druge pa čakajo v vrsti. Običajna stran s 60–100 slikami, skriptami in slogi se nalaga v valovih. HTTP/2 jih pošlje vse naenkrat po eni povezavi, s stisnjenimi glavami, zato se ista stran začne prikazovati prej, najbolj opazno na telefonu z veliko zakasnitvijo. Na strani ni treba spremeniti ničesar: HTML, datoteke in naslovi ostanejo enaki.

HTTP/2 podpirajo vsi sodobni brskalniki in večina strežnikov ga zna že leta; pogosto le ni bil vklopljen. Kontrolni seznam strani pokaže opozorilo, ko je stran postrežena samo prek HTTP/1.1. Tudi HTTP/3 šteje kot uspeh.

Preden začnete: HTTPS

Brskalniki HTTP/2 uporabljajo samo prek HTTPS. Stran, ki se še vedno streže prek navadnega http://, mora najprej dobiti certifikat in preusmeritev: glejte Preusmerite HTTP na HTTPS.

Preverite sami

Namesto example.com vpišite svojo stran:

curl -s -o /dev/null --http2 -w '%{http_version}\n' https://example.com/
openssl s_client -connect example.com:443 -servername example.com -alpn h2 </dev/null 2>/dev/null | grep -i alpn

Prvi ukaz izpiše 2 (ali 3), ko HTTP/2 deluje, in 1.1, ko ne. Drugi pokaže, na kaj je strežnik pristal med rokovanjem TLS: ALPN protocol: h2 je HTTP/2, No ALPN negotiated pa pomeni, da ga strežnik ne ponuja.

Kako popraviti

Izberite strežnik, s katerim se brskalnik obiskovalca dejansko pogovarja. Če stran teče za Cloudflarom, je to Cloudflare, in izvorni strežnik za to postavko ni pomemben.

nginx

Najprej preverite različico z nginx -v. Nastavitev se je v različici 1.25.1 premaknila.

nginx 1.25.1 in novejši, v bloku server { … } strani za vrata 443:

server {
    listen 443 ssl;
    http2 on;
    # …
}

Starejši nginx (na primer 1.22 na Debianu 12, 1.24 na Ubuntuju 24.04): http2 dodajte v vrstico listen:

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    # …
}

Datoteka strani je na Debianu in Ubuntuju v /etc/nginx/sites-available/, na Rocky, Alma in CentOS pa v /etc/nginx/conf.d/. Preverite in uveljavite:

sudo nginx -t && sudo systemctl reload nginx

Apache in LiteSpeed

Z dostopom do strežnika (Apache). HTTP/2 je mod_http2, na voljo od Apacha 2.4.17. Na Debianu in Ubuntuju ga vklopite s sudo a2enmod http2, na Rocky, Alma in CentOS ga namestite s sudo dnf install mod_http2. Nato to dodajte v <VirtualHost *:443> strani ali enkrat v glavno konfiguracijo za vse strani:

Protocols h2 http/1.1

En pogoj: HTTP/2 ne deluje z MPM prefork, ki ga Debian in Ubuntu uporabljata, kadar PHP teče kot mod_php. Preverite z apachectl -V | grep -i mpm. Če piše prefork, najprej preklopite na PHP-FPM in MPM event (8.3 zamenjajte s svojo različico PHP-ja):

sudo apt install php8.3-fpm
sudo a2dismod php8.3 mpm_prefork
sudo a2enmod mpm_event proxy_fcgi setenvif http2
sudo a2enconf php8.3-fpm
sudo apachectl configtest && sudo systemctl restart apache2

Sprememba MPM-ja zahteva poln restart, ne reload. Na Rocky, Alma in CentOS je PHP-FPM z event že privzet.

LiteSpeed streže HTTP/2 (in HTTP/3) prek HTTPS brez kakršne koli nastavitve. Gostitelj z LiteSpeedom, ki odgovarja samo s HTTP/1.1, ga je izklopil na ravni strežnika; vprašajte podporo.

cPanel

Deljeno gostovanje: HTTP/2 je nastavitev za cel strežnik, ki jo lahko spremeni samo gostitelj. Podporo prosite, naj ga vklopi; večina gostiteljev ga že ima.

Lasten strežnik z WHM:

  1. Odprite WHM → EasyApache 4 in ob trenutnem profilu kliknite Customize.
  2. Pod Apache MPM izberite mod_mpm_event (ali mod_mpm_worker). HTTP/2 s prefork ne deluje.
  3. Pod Apache Modules vklopite mod_http2.
  4. Pojdite na Review in kliknite Provision.

Če strežnik PHP še vedno poganja kot modul Apacha (DSO), odhod s prefork zahteva selitev PHP-ja na PHP-FPM, kar naredite v MultiPHP Manager.

Plesk

V Plesku obiskovalcem odgovarja nginx in v trenutnih različicah je HTTP/2 privzeto vklopljen. Če preverjanje kaže HTTP/1.1, ga vklopite iz ukazne vrstice strežnika:

plesk bin http2_pref --enable

HTTP/2 potrebuje nginx: če je bil izklopljen (stran teče samo na Apachu), ga znova vklopite z plesk sbin nginxmng --enable ali vprašajte gostitelja. Na deljenem gostovanju s Pleskom gostitelja prosite, naj zgornji ukaz požene on.

Cloudflare

Ko stran teče za Cloudflarom (oranžen oblak), Cloudflare obiskovalcem streže prek HTTP/2 na vseh paketih, ne glede na to, kaj podpira izvorni strežnik. HTTP/3 lahko vklopite v nastavitvah domene Network (HTTP/3 (with QUIC)).

Če preverjanje še vedno kaže HTTP/1.1, je zapis verjetno DNS only (siv oblak), zato se obiskovalci pogovarjajo neposredno z vašim strežnikom. Vklopite proxy ali popravite strežnik po njegovem zavihku.

Node.js in Next.js

Node.js ima modul http2, vendar je aplikacija v Node ali Next.js v produkciji običajno za nginxom, izenačevalnikom obremenitve ali platformo, kot je Vercel, in tam se odloči o HTTP/2. Vercel in Netlify privzeto strežeta HTTP/2 in HTTP/3. Za lastnim nginxom sledite zavihku nginx; povezava od nginxa do aplikacije lahko ostane HTTP/1.1.

IIS in ASP.NET

IIS 10 (Windows Server 2016 in novejši) HTTP/2 samodejno uporablja za vsako vezavo HTTPS. IIS 8.5 in starejši (Windows Server 2012 R2) tega ne zna; edina pot je novejši Windows Server ali proxy, kot je Cloudflare, pred njim.

Na Windows Serverju 2019 in novejših ima vezava HTTPS potrditveno polje Disable HTTP/2 (Site → Bindings → Edit). Prepričajte se, da ni obkljukano.

Gostovane platforme

Shopify, Wix, Squarespace in Webflow vse strani strežejo prek HTTP/2 ali HTTP/3. Če kontrolni seznam za stran na eni od njih kaže HTTP/1.1, domena verjetno ne kaže neposredno na platformo, na primer prek starega proxyja; preverite njene zapise DNS.

Potrdite popravek

Znova poženite ukaz curl iz razdelka Preverite sami, nato v PulseKeeperju odprite tarčo in na zavihku Kontrolni seznam kliknite Preveri zdaj. Postavka se v nekaj minutah obarva OK, ne šele ob naslednjem dnevnem preverjanju.