Nginx je robustní, rychlý, spolehlivý a dynamický webový server s otevřeným zdrojovým kódem oblíbený pro obsluhu stránek s vysokou návštěvností. Kromě toho je dobře známý pro svou snadnou konfiguraci, vysokou škálovatelnost a podporu pro nesčetné množství protokolů.
Mezi protokoly podporované Nginx patří nový protokol HTTP/2, jehož hlavní výhodou oproti svému předchůdci HTTP 1.1 je vysoká přenosová rychlost požadovaná pro obsahově bohaté webové stránky.
V této příručce se ponoříme do instalace a nastavení zabezpečeného serveru Nginx s podporou HTTP/2:
Předpoklady
Pro začátek projdeme kontrolou letu a uvidíme, zda máme následující
- Instance serveru Ubuntu 18.04 LTS
- Nginx verze 1.9.5 nebo vyšší (Pro ověření verze Nginx spusťte
nginx -v
), přečtěte si Instalovat Nginx na Ubuntu 18.04. - OpenSSL verze 1.0.2 nebo vyšší (Zkontrolujte verzi pomocí openssl verze)
- Běžný uživatel bez oprávnění root s právy sudo
- Plně kvalifikovaný název domény (FQDN) V tomto případě použijeme
crazytechgeek.info
zakoupené od GoDaddy.Záznam A názvu domény by měl ukazovat na IP adresu serveru. crazytechgeek.info bylo nasměrováno na 216.200.116.207.
- Certifikát SSL (Buď certifikát podepsaný svým držitelem, nebo certifikát Let’s encrypt SSL. Podobně si můžete zakoupit jeden od jiného poskytovatele.
Krok 1 – Povolení podpory HTTP /2.0
Pro začátek se předpokládá, že jste nakonfigurovali blok serveru Nginx na
/etc/nginx/sites-available/your_domain
V našem případě je blok serveru /etc/nginx/sites-available/crazytechgeek.info
.
Pomocí svého oblíbeného textového editoru otevřete soubor bloku serveru a vyhledejte listen
direktiva, jak je znázorněno
První direktiva označuje připojení IPv6, zatímco druhá je určena pro připojení IPv4
Nyní upravíme každou direktivu tak, aby obsahovala http2
příznak, jak je znázorněno
Toto bude instruovat Nginx, aby používal HTTP/2 v podporovaných prohlížečích
Uložte konfigurační soubor a ukončete editor.
Dále otevřete /etc/nginx/sites-available/default
soubor a proveďte stejné změny
Uložte a ukončete textový editor.
Abyste se ujistili, že v žádném ze souborů Nginx nejsou žádné syntaktické chyby, spusťte níže uvedený příkaz
$ sudo nginx -t
Výstup
Krok 2 – Vymazání starých a nezabezpečených šifer
Aby HTTP/2 fungovalo podle očekávání, musíme se vyhnout používání starých a nezabezpečených šifer, které byly na černé listině HTTP/2. Šifrovací sady jsou kryptografické algoritmy, které určují, jak má být provoz šifrován.
Pokud byl k získání certifikátů použit certbot, pak šifry v cestě /etc/letsencrypt/options-ssl-nginx.conf
nejsou dostatečně zabezpečené pro HTTP/2. Úprava tohoto souboru však způsobí pouze chyby a zabrání certbotu použít aktualizace. To znamená, že musíme specifikovat náš seznam šifer a instruovat Nginx, aby soubor ignoroval
Otevřete konfigurační soubor pro váš blok doménového serveru Nginx
$ vim /etc/nginx/sites-available/crazytechgeek.info
Komentujte tento řádek
# include /etc/letsencrypt/options-ssl-nginx.conf;
Pod tento řádek připojte řádek níže a definujte povolené šifry
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
Uložte soubor a ukončete textový editor
Pokud byl použit certifikát s vlastním přiřazením nebo certifikát třetí strany, otevřete soubor
/etc/nginx/snippets/ssl-params.conf
$ sudo vim /etc/nginx/snippets/ssl-params.conf
Vyhledejte řádek, jak je znázorněno níže
...
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
...
Upravte soubor odpovídajícím způsobem, jak je znázorněno níže
...
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
Nakonec uložte a ukončete konfigurační soubor
Znovu zkontrolujte případné chyby konfigurace Nginx
$ sudo nginx -t
Pokud vše proběhlo v pořádku, měli byste vidět výstup níže, jak je uvedeno výše
Restartujte Nginx
$ sudo systemctl reload nginx
V dalším kroku otestujeme, zda náš server dokáže serverovat HTTP/2 stránky
Krok 3 – Testování, zda je povolen HTTP/2
Nyní otestujeme, zda HTTP běží a je povoleno na našem webovém serveru Nginx
Ve svém terminálu spusťte níže uvedený příkaz
curl -I -L https://your_domain
V našem případě to bude
curl -I -L https://crazytechgeek.info
Výstup
Případně můžete ověřit HTTP/2 otevřením nástrojů pro vývojáře Google klepnutím na
Ctrl + Shift + I
Dále klikněte na Network
Tab.
V Protocol
ve sloupci, nezapomeňte najít štítek h2
Krok 4 – Nasazení HTTP Strict Transport Security
A konečně, i když velmi jasně víme, že náš server může přesměrovat požadavky HTTP na HTTPS, chceme povolit HSTS HTTP Strict Transport Security, aby taková přesměrování eliminovala. Pokud prohlížeč narazí na hlavičku HSTS, nebude se po určitou dobu pokoušet znovu připojit k serveru. IT si bude vyměňovat data pouze prostřednictvím zabezpečeného a šifrovaného protokolu HTTPS.
Chcete-li toho dosáhnout, otevřete konfigurační soubor Nginx
$ vim /etc/nginx/nginx.conf
Připojte řádek níže
add_header Strict-Transport-Security "max-age=15768000" always;
max-age
se nastavuje v sekundách
Pokud má váš web subdomény a chcete použít HSTS na všechny z nich, připojte includeSubDomains
vlajka na konci řádku
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always;
Uložte a ukončete konfigurační soubor.
Jako vždy zkontrolujte, zda nejsou nějaké chyby
$ sudo nginx -t
Nakonec restartujte Nginx
$ sudo systemctl restart nginx
Závěr
V tuto chvíli váš server Nginx nyní obsluhuje stránky HTTP/2.
Můžete také navštívit https://tools.keycdn.com/http2-test
otestujte stav HTTP/2 vašeho webu, jak je uvedeno
Případně můžete také navštívit tyto stránky
https://http2.pro/
Pro podrobnější výsledky použijte
https://www.ssllabs.com/ssltest/