Installer Nginx
Selvsignert sertifikat og HTTP/2
Installer elinks
Test HTTP/2
Konklusjon
HTTP/2 er den nye versjonen av nå foreldet HTTP/1.1-protokoll som ble standardisert helt tilbake i 1999. Mye har endret seg på nettet siden den gang. Våre applikasjoner er mer komplekse enn de var tilbake enn, så for å takle det var endring i den underliggende transportprotokollen nødvendig. Det viktigste med HTTP/2 er at det vil gjøre nettsiden din raskere for sluttbrukerne.
Kort fortalt legger HTTP/2 til 5 nøkkelfunksjoner:
- Enkel, vedvarende forbindelse
- Multipleksing
- Topptekstkomprimering
- Ressursprioritering
- Sikrer transportlag (kun gyldig for nettlesere)
Å forklare alle disse funksjonene er utenfor omfanget av denne opplæringen, men hvis du vil grave dypere inn i dette emnet, kan jeg anbefale et utdrag fra boken High Performance Browser Networking - HTTP/2-utdrag .
I denne guiden skal vi installere siste stabile versjon av Nginx på Ubuntu 16.04 (Xenial), generere selvsignert SSL-sertifikat, aktivere HTTP/2- protokoll i Nginx og installere tekstbasert nettleser for elinkså fungere som HTTP-klient.
Installer Nginx
For å installere den siste stabile versjonen av Nginx må vi utstede ganske mange kommandoer:
Vi må laste ned Nginx offentlige PGP-nøkkel som brukes til å signere pakker og depoter og legge den til i nøkkelringen som brukes av pakkebehandleren for å bekrefte ektheten til pakker som er lastet ned fra depotet.
wget https://nginx.org/keys/nginx_signing.key && apt-key add nginx_signing.key
Slett PGP-nøkkelen fra filsystemet:
rm nginx_signing.key
Legg til nytt depot
printf "deb http://nginx.org/packages/ubuntu/ xenial nginx \ndeb-src http://nginx.org/packages/ubuntu/ xenial nginx \n" >> /etc/apt/sources.list.d/nginx.list
Oppdater pakkelisten og installer Nginx:
apt update && apt install nginx -y
For å bekrefte Nginx-versjonen kan vi bruke følgende:
nginx -v
# nginx version: nginx/1.10.1
Hvis alt går bra bør du se mønster som 1.10.xi utdataene når du kjører nginx -vkommandoen.
Selvsignert sertifikat og HTTP/2
Although HTTP/2 spec doesn’t force browsers to implement HTTP/2 over TLS, all major browsers decided to only implement HTTP/2 over TLS, but not any TLS version, only TLS 1.2 or higher.
Vi skal lage selvsignerte sertifikater for fiktivt example.comdomene, for produksjon trenger du gyldig domene og bruker pålitelig CA.
Generer privat nøkkel:
openssl genrsa -aes128 -out example.com.key 2048
Etter å ha kjørt denne kommandoen må du skrive inn passord 2 ganger. Fordi passordfraser er irriterende, skal vi fjerne det.
Fjern passordfrase fra privat nøkkel:
openssl rsa -in example.com.key -out example.com.key
Generer forespørsel om sertifikatsignering (CSR):
openssl req -new -sha256 -key example.com.key -out cert-request.csr
We are creating single-domain certificate so we need to set common-name field equal to example.com domain
Opprett sertifikat:
openssl x509 -req -days 365 -in cert-request.csr -signkey example.com.key -out example.com.crt
Sorter ut sertifikat og privat nøkkel:
mkdir -p /etc/ssl/testing/private && mkdir /etc/ssl/testing/certs
mv example.com.key /etc/ssl/testing/private && mv example.com.crt /etc/ssl/testing/certs
Lag nginx virtuelle vertskataloger
mkdir /etc/nginx/sites-available && mkdir /etc/nginx/sites-enabled
Så løp nano /etc/nginx/nginx.confog finn et direktiv include /etc/nginx/conf.d/*.conf;. Legg til include /etc/nginx/sites-enabled/*;Lagre ( CTRL+O ) under dette direktivet og avslutt ( CTRL+X ).
##
# Virtual Hosts
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
Lag en fil kalt example.com.confinne i /etc/nginx/sites-availablekatalogen med denne kommandoen nano /etc/nginx/sites-available/example.com.confog kopier/lim inn følgende kode:
server {
listen 80;
listen [::]:80;
server_name example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;
root /var/www/html;
index index.nginx-debian.html;
ssl_certificate /etc/ssl/testing/certs/example.com.crt;
ssl_certificate_key /etc/ssl/testing/private/example.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
ssl_prefer_server_ciphers on;
}
Gratulerer, du har nå HTTP/2- aktivert webserver. Å legge til http2parameter til listendirektivet inne i virtuell HTTPS-vert vil gi deg HTTP/2- støtte.
Lag en symbolsk lenke for /etc/nginx/sites-available/example.com.confmed denne kommandoen:
ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled
Test konfigurasjonssyntaks
nginx -t
Start Nginx på nytt for å bruke endringene dine:
systemctl restart nginx
Legg til example.comdomene i /etc/hostsfilen
echo '127.0.0.1 example.com' >> /etc/hosts
Installer elinks
For å teste din virtuelle vert trenger vi tekstbasert nettleser - elinks.
For å installere elinks bruk følgende kommando:
apt install elinks
For å teste den example.comvirtuelle vertskjøringen din:
elinks https://example.com
For å gå ut av elinks-nettleseren, trykk på q på tastaturet og deretter Enter .
Test HTTP/2
For å se hvilke protokoller serveren annonserer er den enkleste måten å bruke opensslverktøysettet.
openssl s_client -connect example.com:443 -nextprotoneg ''
I utdataene til denne kommandoen bør du se noe slikt:
CONNECTED(00000003)
Protocols advertised by server: h2, http/1.1
For å se HTTP/2 i aksjon kan du bruke nettleserutviklerverktøy. HTTP/2- protokollen indikeres enten med h2eller HTTP/2.0identifikatorer. Åpne nettverkspanelet i dev-tools og oppdater siden din.
Konklusjon
Nå bør du være klar over hvor "enkelt" det er å aktivere HTTP/2 i Nginx-konfigurasjon, men det er ikke hele delen av helhetsbildet. Først bør du tenke på å aktivere TLS/SSL på serveren din med sterke chiffersuiter og sørge for at du ikke bruker svartelistede chiffer . Først etter at du har aktivert sterk TLS/SSL på serveren din, kan du begynne å tenke på å aktivere HTTP/2 .