GNU/Linux >> Znalost Linux >  >> Debian

Nainstalujte Nginx s PHP a MySQL (LEMP) plus SSL na Debian 10

LEMP je zkratka, která znamená následující softwarový balík:Linux jádro, Nginx webový server, MariaDB databáze (nebo MySQL ) a PHP programovací jazyk na straně serveru. Tento software je dnes široce používán na serverech na internetu k poskytování dynamických webových stránek nebo interaktivních webových aplikací.

Nginx je moderní a na zdroje nenáročný webový server, který je aktivně vyvíjen a je druhým nejpoužívanějším webovým serverem na internetu po Apache HTTP serveru. Je obzvláště rychlý, protože používá asynchronní, událostmi řízený přístup ke zpracování požadavků.

Tento tutoriál vám ukáže, jak nainstalovat a nakonfigurovat zásobník LEMP (Nginx s MariaDB a PHP 7) na nejnovější verzi Debianu 10.

POŽADAVKY

  • Nejnovější verzi operačního systému Debian 10, kterou lze získat z následujícího odkazu https://www.debian.org/CD/http-ftp/, nainstalovat od začátku na VPS, virtuální počítač nebo přímo na samostatný stroj.
  • Přímý přístup ke konzole serveru nebo vzdálené připojení SSH.
  • Síťové rozhraní nakonfigurované se statickou IP adresou pro počítač
  • Registrovaný název veřejné domény se záznamy DNS A a CNAME (www) nakonfigurovanými na straně jmenného serveru. V této příručce používáme jako příklad doménu example.com.

Krok 1:Počáteční konfigurace

Prvním krokem je přihlásit se pomocí root nebo uživatele s právy root ve vašem systému a aktualizovat součásti Debianu 10 (upgrady jádra, aktualizace balíčků a bezpečnostní záplaty) vydáním následujících příkazů.

sudo apt  update
sudo apt upgrade
sudo apt dist-upgrade

Dále se ujistěte, že jste přidali popisný název pro název hostitele vašeho počítače spuštěním příkazu níže. Následně byste měli restartovat systém, abyste mohli odpovídajícím způsobem použít nový název hostitele.

sudo hostnamectl set-hostname hostname.yourdomain.com
sudo init 6

Dále pokračujte a nainstalujte nástroje net-tools wget, curl a bash-completion, abyste je mohli později použít ke snadné správě vašeho serveru Debian.

sudo apt install net-tools sudo wget curl bash-completion

Krok 2:Nainstalujte webový server Nginx

Nginx je moderní a na zdroje efektivní webový server používaný k zobrazování webových stránek návštěvníkům na internetu. Nainstalujte webový server Nginx z úložiště Debian 10 spuštěním níže uvedeného příkazu v konzole vašeho serveru.

sudo apt-get install nginx

Jak je znázorněno na obrázku výše, správce balíčků apt zkontroluje další závislosti balíčku a zeptá se vás, zda souhlasíte s pokračováním v procesu instalace. Odpovězte ano (y ), abyste mohli nainstalovat Nginx.

Dále spusťte netstat za účelem zobrazení síťových soketů ve vašem systému a ověření, zda démon nginx naslouchá na portu 80/TCP. Případně můžete chtít vydat systemctl za účelem kontroly stavu démona nginx, jak je znázorněno na obrázku níže.

sudo netstat -tlp
sudo netstat –tlpn
sudo systemctl status nginx.service

Jakmile bude server nginx ve vašem systému spuštěn a spuštěn, zadejte ifconfig k zobrazení informací o síťových rozhraních a seznamu IP adres vašeho zařízení. Poté otevřete prohlížeč a navštivte výchozí webovou stránku Nginx prostřednictvím protokolu HTTP přidáním IP adresy do prohlížeče. Zpráva „Vítejte v Nginxu!“ by se měl zobrazit v okně vašeho prohlížeče.

http://www.example.com

nebo

http://192.168.0.100

Krok 3:Aktivujte protokol Nginx HTTP/2.0

Ve výchozím nastavení jsou nejnovější verze binárních souborů Nginx poskytované repozitáři Debian 10 sestaveny s protokolem HTTP/2.0. HTTP/2.0 je integrován s protokoly TSL/SSL a může zlepšit rychlost načítání webových stránek prostřednictvím zabezpečených transakcí.

Všechny moderní prohlížeče, jako je Chrome nebo Firefox, by měly tento protokol standardně podporovat. Pamatujte však, že prohlížeče Microsoft Internet Explorer a Microsoft Edge zatím neumí analyzovat protokol http2.

Chcete-li povolit protokol HTTP/2.0 v Nginx na Debianu 10, musíte provést nějaké změny ve výchozím konfiguračním souboru Nginx nebo vytvořit nový konfigurační soubor a přidat blok kódu TLS pro servery 443. Chcete-li toho dosáhnout, nejprve vytvořte zálohu výchozí konfigurace dostupné pro weby Nginx spuštěním následujícího příkazu. Potvrďte, že záloha byla úspěšná, uvedením obsahu adresáře sites-available.

sudo cp /etc/nginx/sites-available/default{,.backup}
ls /etc/nginx/sites-available/

Dále vytvořte konfigurační soubor Nginx TLS pomocí textového editoru a přidejte následující obsah.

sudo nano /etc/nginx/sites-available/default-ssl

default-ssl úryvek ze souboru:

    server {
                listen 443 ssl http2 default_server;
                listen [::]:443 ssl http2 default_server;
                #server_name  www.domain.tld;
                server_name _;
                                
                root /var/www/html;
                                
                access_log /var/log/nginx/access.log;
                error_log /var/log/nginx/error.log;
                
                #SSL Certificates
                ssl_certificate "/etc/nginx/ssl/cert.pem";
                ssl_certificate_key "/etc/nginx/ssl/privekey.pem";
                ssl_dhparam /etc/nginx/ssl/dhparam.pem;
                
                ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
                #ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
 
                ssl_session_cache shared:SSL:1m;
                ssl_session_timeout 10m;
                ssl_ciphers HIGH:!aNULL:!MD5;
                ssl_prefer_server_ciphers  on;
               
                add_header Strict-Transport-Security "max-age=31536000;
                #includeSubDomains" always;
 
                location / {
                index index.php index.html index.htm;
                    try_files $uri $uri/ /index.php?$args $uri/ =404;
                }
 
                                set $cache_uri $request_uri;
                
                location ~ /.well-known {
                allow all;
                               }
               location ~ \.php$ {
                                include snippets/fastcgi-php.conf;
                #
                #             # With php-fpm (or other unix sockets):
                              fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
                #             # With php-cgi (or other tcp sockets):
                #             fastcgi_pass 127.0.0.1:9000;
                }
 
                # deny access to .htaccess files, if Apache's document root
                # concurs with nginx's one
                #
                #location ~ /\.ht {
                #             deny all;
                #}
                   }

Příkaz, který umožňuje použití protokolu HTTP/2.0, je reprezentován slovem http2 z níže uvedeného řádku.

 listen 443 ssl http2 default_server;

V případě, že prohlížeče vašich návštěvníků nepodporují protokol HTTP2, odeberte http2 word z konfigurací vašeho serveru, abyste deaktivovali protokol a restartovali službu nginx, aby se změny uplatnily.

V případě, že máte registrovanou doménu nebo používáte virtuální hosting na základě IP adres, měli byste za název_serveru přidat název své domény nebo IP adresu. direktiva, jak je ukázáno v níže uvedeném příkladu.

server_name www.example.com example.com;

Jakmile dokončíte úpravy výchozího konfiguračního souboru Nginx s výše uvedeným nastavením

Nakonfigurujte SSL v Nginx

Ve výše uvedeném konfiguračním souboru TSL nginx jsme zadali cestu pro certifikát a klíč TLS. Protože jsme ještě nenainstalovali klíče do vašeho systému, zadejte následující příkaz pro vygenerování souboru certifikátu SSL s vlastním podpisem a klíče. Během generování SSL certifikátu budete dotázáni na řadu otázek. Zadejte dvoumístný kód pro vaši zemi, stát nebo provincii, název vašeho města, název vaší organizace, název jednotky vaší organizace, běžný název vašeho serveru a platnou e-mailovou adresu. Měli byste se ujistit, že jste nastavili Common Name tak, aby odpovídal záznamu FQDN vašeho počítače ze serveru DNS nebo IP adrese vašeho serveru použitého pro přístup na web. Certifikát a klíč jsou uloženy v novém adresáři v adresáři nginx s názvem ssl, jak ukazuje následující snímek obrazovky.

sudo mkdir /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/privekey.pem -out /etc/nginx/ssl/cert.pem
ls /etc/nginx/ssl/

Vygenerujte také novou silnou šifru Diffie-Hellman, kterou naleznete ve výše uvedeném konfiguračním souboru na ssl_dhparam příkazový řádek, zadáním níže uvedeného příkazu:

sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

Nakonec po vygenerování klíče Diffie-Hellman aktivujte konfigurační soubor TLS vytvořením symbolického odkazu pro default-ssl konfigurační soubor z webů-dostupných do adresáře s povolenými weby adresáře zadáním následujícího příkazu.

ln -s /etc/nginx/sites-available/default-ssl /etc/nginx/sites-enabled/

Dále otestujte konfigurační soubor Nginx na chyby syntaxe, a pokud je vše v pořádku, restartujte démona Nginx, abyste použili všechny změny spuštěním níže uvedených příkazů.

sudo nginx -t
sudo systemctl restart nginx.service

Zkontrolujte, zda konfigurace SSL proběhla úspěšně

Chcete-li ověřit, zda se webový server Nginx váže na port SSL, zadejte příkaz netstat a zkontrolujte, zda je port 443 zobrazen v režimu poslechu.

netstat -tlpn | grep nginx

Níže uvedený snímek obrazovky ilustruje výše uvedené kroky.

Poté přejděte z prohlížeče na název své domény nebo IP adresu vašeho serveru prostřednictvím protokolu HTTP, abyste zobrazili výchozí stránku nginx. Protože používáte certifikáty s vlastním podpisem, měla by se ve vašem prohlížeči zobrazit chyba. Potvrďte chybu, abyste přešli na výchozí hlavní stránku nginx.

V případě, že Nginx neposkytuje výchozí index.html stránku v adresáři webroot, zadejte následující příkaz k vytvoření stránky indexu.

echo "test page" | tee /var/www/html/index.html

Chcete-li potvrdit přítomnost protokolu HTTP/2.0 inzerovaného společností Nginx, zadejte níže uvedený příkaz. Hledejte h2 word v protokolech inzerovaných serverem.

 openssl s_client -connect localhost:443 -nextprotoneg ''

Můžete také vizualizovat stav připojení a zkontrolovat, zda protokol http2 inzeruje Nginx z prohlížeče Chrome stisknutím funkční klávesy F12 a vyžádat si stránku. Chcete-li zobrazit protokol používaný požadavkem, přejděte na kartu Síť, klepněte pravým tlačítkem myši na nabídku Typ a zaškrtněte políčko Protokol uložen. Protokol HTTP2 by měl být zobrazen jako h2 ve sloupci aktuálního protokolu, jak je znázorněno na níže uvedeném snímku obrazovky.

Krok 4:Nainstalujte PHP 7

Webový server Nginx dokáže obsluhovat dynamický webový obsah pomocí interpretu programovacího jazyka PHP prostřednictvím správce procesů PHP FastCGI, kterému Nginx předává požadavky ke zpracování. Správce procesů FastCGI lze získat instalací php-fpm předkompilovaný balíček nabízený oficiálními repozitáři Debianu 9.

Chcete-li do systému nainstalovat správce procesů php-fpm a interpret PHP7.0 spolu s dalšími balíčky, které umožní PHP komunikovat s webovým serverem Nginx, zadejte na konzole serveru následující příkaz:

sudo apt install php7.3 php7.3-fpm php7.3-curl php7.3-gd

Spusťte PHP-FPM

Jakmile je interpret PHP 7.3 úspěšně nainstalován na váš systém, spusťte a zkontrolujte démona php7.3-fpm zadáním níže uvedeného příkazu:

sudo systemctl start php7.3-fpm
sudo systemctl status php7.3-fpm

Ve výše uvedeném konfiguračním souboru TLS Nginx jsme již přidali konfigurace bloků pro správce procesů PHP FastCGI, abychom mohli obsluhovat dynamický obsah. Blok kódu, který umožňuje Nginxu používat PHP interpret, je zobrazen v níže uvedeném úryvku, takže k úpravě konfiguračního souboru Nginx TSL nejsou potřeba žádné další kroky. Znak hashtag # na začátku řádků na níže uvedeném snímku obrazovky jsou komentáře. Řádky s komentářem z konfiguračních souborů webový server Nginx ve výchozím nastavení ignoruje.

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
}

Otestujte konfiguraci PHP

Chcete-li otestovat a ověřit, zda Nginx dokáže správně předávat soubory php procesoru PHP, vytvořte PHP info.php otestujte konfigurační soubor zadáním níže uvedeného příkazu

sudo su -c 'echo "<?php phpinfo(); ?>" > /var/www/html/info.php'

Poté přejděte na stránku s informacemi o php ve svém webovém prohlížeči tak, že přejdete na název domény nebo veřejnou IP adresu vašeho serveru a poté /info.php jak je znázorněno na obrázku níže.

https://www.example.com/info.php

nebo

http://192.168.0.100/info.php

Můžete také zkontrolovat, zda server inzeruje protokol HTTP/2.0, vyhledáním řádku $_SERVER[‘SERVER_PROTOCOL’] na proměnné PHP.

Chcete-li nainstalovat další moduly PHP7.3, spusťte apt search php7.3 příkaz najít konkrétní modul PHP a nainstalovat jej. Pokud plánujete instalaci systému správy obsahu, jako je WordPress, nainstalujte si tyto extra moduly:

sudo apt install php7.3-mcrypt php7.3-mbstring

Nově nainstalované moduly PHP však nejsou ve vašem systému standardně povoleny. Chcete-li je aktivovat, restartujte službu PHP-FPM.

sudo systemctl restart php7.3-fpm.service

Krok 5:Instalace databáze MariaDB

Konečně v databázi chybí poslední dílek skládanky zásobníku LAMP. Databázová komponenta LEMP MariaDB slouží k ukládání záznamů v tabulkách a sloupcích. Bude dynamicky spravovat data webové aplikace. Chcete-li nainstalovat MariaDB, spusťte následující příkaz v konzole vašeho serveru. Poté restartujte démona PHP FPM, abyste povolili modul PHP-MySQL, který je nutný pro přístup k databázi.

sudo apt install mariadb-server mariadb-client php7.0-mysql
sudo systemctl restart php7.0-fpm.service

Ve výchozím nastavení může systémový účet root nebo uživatelé s oprávněními root přistupovat k databázi bez zadání hesla. Chcete-li toto chování změnit tak, aby MySQL požadovalo heslo pokaždé, když se uživatel systému pokusí o přístup k databázi, přihlaste se do databáze MySQL pomocí rozhraní příkazového řádku s oprávněními root a spusťte následující příkazy v konzole MySQL:

sudo mysql
MariaDB> use mysql;
MariaDB> update user set plugin='' where User='root';
MariaDB> flush privileges;
MariaDB> exit

Nastavit heslo uživatele root v MariaDB

V dalším kroku se ujistěte, že jste zabezpečili MariaDB spuštěním bezpečnostního skriptu mysql_secure_installation. Poskytuje jej instalační balíček z repozitářů Debianu. Při spuštění skriptu položí řadu otázek určených k zabezpečení databáze MariaDB. Jako například:změna hesla root MySQL, odstranění anonymních uživatelů, zakázání vzdáleného přihlášení root a odstranění testovací databáze. Spusťte skript zadáním níže uvedeného příkazu. Řekněte ano na všechny položené otázky, abyste plně zabezpečili démona MySQL. Níže uvedený výstup skriptu použijte pouze jako vodítko.

sudo mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):

OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] y

New password:

Re-enter new password:

Password updated successfully!

Reloading privilege tables..

 ... Success!

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y

 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y

 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y

 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Nakonec, abyste mohli otestovat funkčnost MariaDB, přihlaste se do databáze z konzoly a spusťte následující příkaz. V konzole MariaDB by se měl zobrazit seznam výchozích databází. Konzolu MariaDB opusťte ukončit prohlášení.

mysql -u root –p
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
 
MariaDB [(none)]> exit

To je vše! Na vašem počítači Debian 10 je nainstalován webový server Nginx, databáze MariaDB a programovací jazyk PHP. Nyní můžete začít vytvářet dynamické webové stránky nebo webové aplikace pro své návštěvníky.


Debian
  1. Jak nainstalovat a nastavit PHP a Nginx (LEMP) na Debian 11

  2. Jak nainstalovat a nakonfigurovat server LEMP (Nginx, MySQL a PHP) na Debian 6 (squeeze) VPS

  3. Jak nainstalovat LEMP Stack Nginx, MySQL, PHP na Debian 11

  1. Nainstalujte Lets Encrypt and Secure Nginx pomocí SSL/TLS v Debianu 9

  2. Jak nainstalovat Nginx s PHP a MySQL (LEMP Stack) na Ubuntu 18.04

  3. Nainstalujte Automad CMS s Nginx a Lets Encrypt SSL na Debian 10

  1. Jak nainstalovat InvoicePlane s Nginx na Debian 9

  2. Jak nainstalovat Nginx s PHP a MariaDB (LEMP Stack) na Fedora 31

  3. Jak nainstalovat Nginx s PHP a MySQL (LEMP Stack) na Ubuntu 20.04 LTS