Dnes se podíváme na to, jak nainstalovat na Web server Nginx s PHP a Lets Encrypt na Ubuntu server.

Co je Nginx?

Nginx je malý a rychlý webový server s minimálními nároky na paměť. Zde si propůjčím citaci z wikipedie
„Nginx (anglická výslovnost [ˈendžinex]) je softwarový webový server s load managment a reverzní proxy s otevřeným zdrojovým kódem. Pracuje s protokoly HTTP (i HTTPS), SMTP, POP3, IMAP a SSL. Zaměřuje se především na vysoký výkon a nízké nároky na paměť. Nginx je dostupný na Unixu, Linuxu a dalších Unix-like systémech pod BSD; existují varianty pro Solaris, macOS i MS Windows.“

Nastavme DNS

Než se vrhneme do jakýchkoli nastavení serveru, nastavme si u Vašeho registrátora domény nad Vaší doménou A či AAAA záznamy na Váš server kde budete mít wordpress. V mém případě to bude:
A example.com 1.2.4.5
A www.example.com 1.2.3.4

DNS záznamy se nám zatím budou propisovat a my můžeme začít s instalací.

Pojďme instalovat Nginx

Budete potřebovat nějaký linuxový stroj. Já pro instalaci zvolil Ubuntu 18.04 LTS.

Začneme updatem balíčků tedy sudo apt update && sudo apt upgrade -y

Nyní nainstalujeme samotný Nginx příkazem sudo apt install nginx a je hotovo. Pokud se vše zadařilo máme funkční Nginx a při zadání IP adresy našeho serveru by jsme měli vidět tento screen.

Instalujeme PHP

Webový server Nginx máme nainstalovaný. Většina aplikací (třeba wordpress) ale běží na PHP, takže se pojďme pustit do instalace PHP. Pro instalaci zvolíme repozitář ppa:ondrej/php

Do terminálu tedy zadáme sudo apt install software-properties-common a sudo add-apt-repository ppa:ondrej/php

Tím máme přidán repozitář a můžeme přistoupit k instalaci PHP pomocí příkazů sudo apt update a sudo apt install php7.4 php7.4-fpm

K PHP instalujeme pouze základní knihovnu php-fpm. Některé aplikace, či pluginy vyžadují další knihovny. Tím se v tomto postu zabývat nebudeme, ale instalace se provádí pomocí sudo apt install php7.4-KNIHOVNA.

Po nainstalování zadáme příkaz sudo systemctl status php7.4-fpm . Výsledkem by mělo být active (running). Stiskem CTRL-C vyskočíme z vypisu služby.

Konfigurujeme NGINX

Po úspěšné instalaci je nutno nakonfigurovat web. server aby se bavil s PHP. To uděláme následujícími příkazy.

Nejprve si vytvoříme soubor s názvem Vaší stránky. V mém případě example.com. Soubor vytvoříte zadáním příkazu sudo nano /etc/nginx/sites-available/example.com

Do prázdného souboru vložíte níže uvedený config. Nezapomeňte si změnit server_name na Vaši doménu:

2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
        listen 80;
        root /var/www/html;
        index index.php index.html index.htm;
        server_name example.com;
        location / {
            try_files $uri $uri/ =404;
        }
        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        }
}

Soubor uložíte pomocí CTRL+x poté stiknete klávesu y a potvrdíte enterem.

Poté vytvořte link configuračního souboru na site-enabled pomocí příkazu sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com 

Nyní už stačí restartovat Nginx a otestovat, zda je vše funkční. Restart provedeme pomocí příkazu sudo systemctl restart nginx.service

Testujeme PHP

Na PHP test je nejjednodužší použít PHP script phpinfo(). Pomocí níže uvedeného příkazu si na našem hostingu vytvoříme soubor info.php

echo „<?php phpinfo(); ?>“ > /var/www/html/info.php

Po zadání Vaší web. stránky (pokud už se přepsaly DNS záznamy) s info.php (v mém případe www.example.com/index.php) by jste měli vydět tento výpis.

Přesměrování z WWW na non-www

Pomocí jednoduchého redirectu v nginx si nastavíme přesměrování z www na stránku bez www.

Nejprve pomocí níže uvedeného příkazu vytvoříme soubor redirect.conf který uložíme do /etc/nginx/conf.d

sudo nano /etc/nginx/conf.d/redirect.conf
Do souboru vložíme níže uvedený text upravený o Vaši doménu:
server {
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
Nyní už stačí pouze restartovat nginx příkazem sudo systemctl restart nginx a přesměrování je hotové.

Lets Encrypt aneb pojďme šifrovat

Stavět v dnešní době web bez HTTPS je naprostá hloupost. Stáhneme si tedy repozitář pro generování Lets Encrypt certifikátů a opatříme náš web validním certifikátem.

Pro generování certifikátů použijeme aplikaci Certbot. Nejprve pomocí níže uvedených příkazů přidáme repozitář.

sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update

A nainstalujeme Certbota

sudo apt-get install certbot python3-certbot-nginx

Nyní už stačí jen vygenerovat certifikát pomocí příkazu

sudo certbot --nginx

Systém se zeptá na validní mail adresu, na tento mail Vám budou chodit informace např. o expiraci certifikátu. Dále se Vás systém zeptá, zda souhlasíte s podmínkami použití. Poté bude potřeba ještě odpovědět, zda se chcete zaregistrovat do newsletteru.

Nyní se vypíše seznam domén, které systém nalezl. Meli by jste vidět verzi Vaší domény s www a bez www. Pokud stisknete enter a nic nevyplníte, scprit se pokusí vygenerovat certifikát pro obě varianty.

V posledním kroku se Vás systém zeptá, zda chcete provést přesměrování z HTTP na HTTPS. Zvolíte možnost 2 Redirect

HOTOVO. Máte funkční webový server Nginx s PHP přesměrováním na bez www verzi a s HTTPS.

Aby jste nemuseli myslet na generování certifikátů každé tři měsíce, nastavte si Cron, který bude např. každý týden kontrolovat validitu certifikátu.

Cron nastavíte pomocí příkazu sudo crontab -e

Zde vyplňte kdy se má spouštět obnova certifikátu. Pokud nad tím nechcete nějak moc přemýšlet, postačí když si opíšete příklad v poznámce crontabu a to že se každý týden v 5h ráno bude provádět kontrola validity a případného obnovení certifikátu. Na konec dokumentu vložíte řádek 0 5 * * 1 certbot renew a soubor uložíte

Patrik Žák IT , ,

Napsat komentář