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 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
server { server_name www.example.com; return 301 $scheme://example.com$request_uri; }
sudo systemctl restart nginx
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