GNU/Linux >> Znalost Linux >  >> Cent OS

Jak nainstalovat Nginx s PHP a MySQL (LEMP Stack) na CentOS 7.6

Tento tutoriál ukazuje, jak můžete nainstalovat Nginx na server CentOS 7 s podporou PHP (prostřednictvím PHP-FPM) a podporou MySQL (MariaDB).

Co je LEMP?

Nginx (vyslovováno jako „engine x“) je bezplatný, open-source, vysoce výkonný HTTP server. Nginx je známý svou stabilitou, bohatou sadou funkcí, jednoduchou konfigurací a nízkou spotřebou zdrojů.

Předpoklady LEMP

V tomto tutoriálu budu používat název hostitele server1.example.com s IP adresou 192.168.1.100. Tato nastavení se pro vás mohou lišit, takže je v případě potřeby musíte nahradit.

K úpravě konfiguračních souborů použiji v tomto tutoriálu nano editor. Nano lze nainstalovat takto.

yum -y install nano

Doporučuji mít nainstalovaný firewall. Pokud firewalld ještě nemáte nainstalovaný a chcete firewall používat, nainstalujte jej pomocí těchto příkazů:

yum -y install firewalld

spusťte bránu firewall a povolte její spuštění při spouštění.

systemctl spustit firewalld.service
systemctl povolit firewalld.service

Dále otevřete svůj port SSH, abyste se ujistili, že se budete moci připojit k serveru pomocí SSH.

firewall-cmd --permanent --zone=public --add-service=ssh
firewall-cmd --reload

Povolení dalších úložišť CentOS

Nejnovější Nginx není dostupný z oficiálních úložišť CentOS, takže k jeho instalaci zařazujeme úložiště projektu Nginx:

nano /etc/yum.repos.d/nginx.repo
[nginx]name=nginx repobaseurl=http://nginx.org/packages/centos/$releasever/$basearch/gpgcheck=0enabled=1

Instalace MySQL (MariaDB)

Nejprve nainstalujeme MariaDB jako náhradu MySQL. MariaDB je bezplatný fork MySQL. Spuštěním tohoto příkazu v shellu nainstalujete databázový server MariaDB:

yum -y nainstalujte mariadb mariadb-server net-tools

Poté vytvoříme spouštěcí odkazy systému pro MariaDB (takže se automaticky spustí při každém spuštění systému) a spustíme server MariaDB:

systemctl povolit mariadb.service
systemctl spustit mariadb.service

Nyní zkontrolujte, zda je síť povolena. Upozorňujeme, že služba MraiDB se jmenuje mysql, protože se jedná o kompatibilní databázový server. Spustit

netstat -tap | grep mysql

Mělo by to ukazovat něco takového:

[[e-mail chráněný] ~]# netstat -tap | grep mysql
tcp 0 0 0.0.0.0:mysql 0.0.0.0:* LISTEN 19842/mysqld 

Spustit:

mysql_secure_installation

pro nastavení hesla pro uživatele root (jinak má kdokoli přístup k vaší databázi MySQL!):

[[email protected] ~]# mysql_secure_installation
/usr/bin/mysql_secure_installation:řádek 379:find_mysql_client:příkaz nenalezen
POZNÁMKA:SPUŠTĚNÍ VŠECH ČÁSTÍ TOHOTO SKRITTU DOPORUČUJEME PRO VŠECHNY SERVERY, KTERÉ SE POUŽÍVAJÍ ve výrobě! ČTĚTE PROSÍM POZORNĚ KAŽDÝ KROK!
Abychom se mohli přihlásit do MariaDB a zabezpečit ji, budeme potřebovat aktuální
heslo uživatele root. Pokud jste právě nainstalovali MariaDB a
ještě jste nenastavili heslo uživatele root, heslo bude prázdné,
měli byste zde stisknout enter.
Zadejte aktuální heslo pro root (zadejte žádné):
OK, úspěšně použité heslo, pokračujeme...
Nastavení hesla uživatele root zajistí, že se nikdo nemůže přihlásit k uživateli MariaDB
root bez řádné autorizace.
Nastavit heslo root? [A/N] <-- ZADEJTE
Nové heslo:<-- heslo vaše rootsql
Znovu zadejte nové heslo:<-- heslo vášrootsql
Heslo bylo úspěšně aktualizováno!
Opětovné načítání tabulek oprávnění. .
... Úspěch!
Ve výchozím nastavení má instalace MariaDB anonymního uživatele, který umožňuje komukoli
přihlásit se do MariaDB, aniž by pro něj musel
vytvářet uživatelský účet. Toto je určeno pouze pro testování a aby instalace
byla o něco plynulejší. Než se přesunete do
produkčního prostředí, měli byste je odstranit.
Odebrat anonymní uživatele? [A/N] <-- ENTER
... Úspěch!
Normálně by měl mít root povoleno připojení pouze z 'localhost'. To
zajišťuje, že někdo nemůže uhodnout heslo root ze sítě.
Zakázat vzdálené přihlášení root? [A/N] <-- ENTER
... Úspěch!
Ve výchozím nastavení přichází MariaDB s databází s názvem 'test', ke které má 
přístup každý. Toto je také určeno pouze pro testování a mělo by být odstraněno
před přesunem do produkčního prostředí.
Odebrat testovací databázi a získat k ní přístup? [A/N] <-- ENTER
- Rušení testovací databáze...
... Úspěch!
- Odebírání oprávnění pro testovací databázi...
... Úspěch !
Opětovné načtení tabulek oprávnění zajistí, že všechny dosud provedené změny
se okamžitě projeví.
Obnovit nyní tabulky oprávnění? [A/N] <-- ENTER
... Úspěch!
Probíhá úklid...
Vše hotovo! Pokud jste provedli všechny výše uvedené kroky, vaše
instalace MariaDB by nyní měla být zabezpečená.
Děkujeme, že používáte MariaDB!
[[email protected] ~]#

[[email protected] ~]# mysql_secure_installation

Instalace Nginx

Nginx je dostupný jako balíček z nginx.org, který můžeme nainstalovat takto:

yum -y nainstalujte nginx

Poté vytvoříme spouštěcí odkazy systému pro nginx a spustíme jej:

systemctl povolit nginx.service
systemctl spustit nginx.service

Existuje šance, že se zobrazí chyba, že port 80 je již používán, chybová zpráva bude vypadat takto:

[[e-mail chráněný] ~Spuštění # služby nginx
Spouštění nginx:nginx:[emerg] bind() to 0.0.0.0:80 se nezdařilo (98:Adresa se již používá)
nginx:[emerg] bind() na 0.0.0.0:80 se nezdařilo (98:adresa se již používá)
nginx:[emerg] bind() na 0.0.0.0:80 selhala (98:adresa se již používá)
nginx:[emerg] bind() na 0.0.0.0:80 se nezdařilo (98:adresa se již používá)
nginx:[emerg] bind() na 0.0.0.0:80 se nezdařila (98:adresa je již zadaná use)
nginx:[emerg] se stále nepodařilo bind()
                                                                      [SELHLA]
] ~[e-mailem chráněno #

To znamená, že na tomto serveru již běží jiný webový server (pravděpodobně Apache). Zastavte službu Apache a poté spusťte službu pro NGINX:

systemctl stop httpd.service
yum remove httpd
systemctl deaktivovat httpd.service

Potom zkuste znovu spustit Nginx.

systemctl spustí nginx.service

Otevřete porty HTTP a HTTPS ve bráně firewall

firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload

Výsledný výstup na shellu bude vypadat takto:

[[chráněno e-mailem] ~]# cmd brány firewall --permanent --zone=public --add-service=http
úspěch
[[chráněn e-mailem] ~]# cmd brány firewall - -permanent --zone=public --add-service=https
úspěch
[[chráněno e-mailem] ~]# firewall-cmd --reload
úspěch
[[chráněno e-mailem ] ~]#

Zadejte do prohlížeče IP adresu nebo název hostitele svého webového serveru (např. http://192.168.1.100) a měla by se zobrazit uvítací stránka Nginx:

Instalace PHP

Můžeme zajistit, aby PHP 5 fungovalo s Nginx pomocí PHP-FPM (FastCGI Process Manager). PHP-FPM je alternativní implementace PHP FastCGI s některými dalšími funkcemi užitečnými pro weby jakékoli velikosti, zejména pro rušnější weby. Můžeme nainstalovat php-fpm společně s php-cli a některými moduly PHP5, jako je php-mysql, které potřebujete, pokud chcete používat MySQL z vašich PHP skriptů následovně:

yum -y install php-fpm php-cli php-mysql php-gd php-ldap php-odbc php-pdo php-pecl-memcache php-pear php-mbstring php-xml php-xmlrpc php-mbstring php- snmp php-soap

APC je bezplatný a otevřený PHP opcode cacher pro ukládání do mezipaměti a optimalizaci PHP přechodného kódu. Je to podobné jako u jiných cacherů PHP operačních kódů, jako jsou eAccelerator a Xcache. Důrazně se doporučuje mít jeden z nich nainstalovaný, aby se urychlila vaše stránka PHP.

Nainstaluji APC z PHP pecl repository. PECL vyžaduje, aby byly ke kompilaci balíčku APC nainstalovány nástroje Centos Development.

yum -y install php-devel
yum -y groupinstall 'Development Tools'

a nainstalujte APC:

pecl install apc
[[email protected] ~]# pecl install apc
stahování APC-3.1.13.tgz ...
Zahájení stahování APC-3.1.13.tgz (171 591 bajtů)
.................hotovo:171 591 bajtů
55 zdrojových souborů, budova
běží:phpize
Konfiguruje se pro:
PHP Verze API:20100412
Zend Module Api No:20100525
Zend Extension Api No:220100525
Povolit interní ladění v APC [ne] :<-- ENTER
Povolit informace o souboru požadavku o souborech používaných z mezipaměti APC [ne] :<-- ENTER
Povolit zámky otáčení (EXPERIMENTÁLNÍ) [ne] :<-- ENTER
Povolit ochranu paměti (EXPERIMENTÁLNÍ) [ne] :<-- ENTER
Povolit mutexy pthread (výchozí) [ne] :<-- ENTER
Povolit zámky čtení/zápisu pthread (EXPERIMENTÁLNÍ) [ano] :<-- ENTER
budování v /var/tmp /pear-build-rootVrjsuq/APC-3.1.13
......

Poté otevřete /etc/php.ini a nastavte cgi.fix_pathinfo=0:

nano /etc/php.ini
[...]; cgi.fix_pathinfo poskytuje *skutečnou* podporu PATH_INFO/PATH_TRANSLATED pro CGI. PHP; předchozí chování bylo nastavit PATH_TRANSLATED na SCRIPT_FILENAME a negrok; co je PATH_INFO. Další informace o PATH_INFO naleznete ve specifikacích cgi. Nastavení; toto na 1 způsobí, že PHP CGI opraví své cesty tak, aby odpovídaly specifikaci. nastavení; nula způsobí, že se PHP bude chovat jako předtím. Výchozí hodnota je 1. Měli byste opravit své skripty; použít SCRIPT_FILENAME spíše než PATH_TRANSLATED.; http://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfocgi.fix_pathinfo=0[...]

(Proč byste to měli udělat, přečtěte si prosím http://wiki.nginx.org/Pitfalls.)

a přidejte řádek:

[...]extension=apc.so

na konci souboru /etc/php.ini.

Kromě toho, aby se předešlo chybám v časovém pásmu jako

[28-June-2016 14:21:01] Upozornění PHP:phpinfo():Není bezpečné spoléhat na nastavení časového pásma systému. Jste *povinni* použít nastavení date.timezone nebo funkci date_default_timezone_set(). V případě, že jste použili některou z těchto metod a stále se vám zobrazuje toto varování, pravděpodobně jste chybně napsali identifikátor časového pásma. Místo toho jsme v /usr/share/nginx/html/info.php na řádku 2 vybrali „Evropa/Berlín“ pro „CEST/2.0/DST“ 

... v /var/log/php-fpm/www-error.log při volání PHP skriptu ve vašem prohlížeči byste měli nastavit date.timezone v /etc/php.ini:

[...][Datum]; Definuje výchozí časové pásmo používané funkcemi data; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezonedate.timezone ="Evropa/Berlín"[...]

Správné časové pásmo pro váš systém můžete zjistit spuštěním:

cat /etc/sysconfig/clock

[[email protected] nginx]# cat /etc/sysconfig/clock
ZONE="Europe/Berlin"
[[email protected] nginx]#

Dále vytvořte spouštěcí odkazy systému pro php-fpm a spusťte jej:

systemctl povolit php-fpm.service
systemctl spustit php-fpm.service

PHP-FPM je proces démona (se skriptem init /etc/init.d/php-fpm), který spouští server FastCGI na portu 9000.

Konfigurace Nginx

Konfigurace nginx je v /etc/nginx/nginx.conf, který nyní otevíráme:

nano /etc/nginx/nginx.conf

Nejprve (toto je volitelné) můžete zvýšit počet pracovních procesů a nastavit keepalive_timeout na rozumnou hodnotu:

[...]worker_processes 4;[...] keepalive_timeout 2;[...]

Virtuální hostitelé jsou definováni v kontejnerech serveru {} v adresáři /etc/nginx/conf.d. Upravme výchozí vhost (v /etc/nginx/conf.d/default.conf) následovně:

nano /etc/nginx/conf.d/default.conf
[...]server { poslouchat 80; název_serveru localhost; #charset koi8-r; #access_log /var/log/nginx/log/host.access.log main; umístění / { root /usr/share/nginx/html; index index.html index.htm index.php; } #error_page 404 /404.html; # přesměrování chybových stránek serveru na statickou stránku /50x.html # error_page 500 502 503 504 /50x.html; umístění =/50x.html { root /usr/share/nginx/html; } # proxy skripty PHP pro Apache naslouchající na 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # předat skripty PHP na server FastCGI naslouchající na 127.0.0.1:9000 # umístění ~ \.php$ { root /usr/share/nginx/html; try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; zahrnout fastcgi_params; } # odepřít přístup k souborům .htaccess, pokud kořen dokumentu Apache # souhlasí s jedním umístěním # nginx ~ /\.ht { zakázat vše; }}

název_serveru _; dělá z tohoto výchozího catchall vhost (samozřejmě zde můžete také zadat název hostitele jako www.example.com).

V umístění / části jsem do řádku indexu přidal index.php. root /usr/share/nginx/html; znamená, že kořen dokumentu je adresář /usr/share/nginx/html.

Důležitou součástí pro PHP je umístění ~ \.php$ {} stanza. Chcete-li ji aktivovat, odkomentujte ji. Změňte kořenový řádek na kořen dokumentu webové stránky (např. root /usr/share/nginx/html;). Vezměte prosím na vědomí, že jsem přidal řádek try_files $uri =404; abyste zabránili zneužití zero-day (viz http://wiki.nginx.org/Pitfalls#Passing_Uncontrolled_Requests_to_PHP a http://forum.nginx.org/read.php?2,88845,page=3). Ujistěte se prosím, že jste změnili řádek fastcgi_param na fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; protože jinak PHP interpret nenajde PHP skript, který voláte ve vašem prohlížeči ($document_root se překládá do /usr/share/nginx/html, protože to je to, co jsme nastavili jako kořen dokumentu).

PHP-FPM standardně naslouchá na portu 9000 na 127.0.0.1, proto říkáme Nginxu, aby se připojil k 127.0.0.1:9000 s řádkem fastcgi_pass 127.0.0.1:9000;. Je také možné, aby PHP-FPM používal Unixový socket – to popíšu v kapitole 7.

Nyní uložte soubor a znovu načtěte Nginx:

systemctl restart nginx.service

Nyní vytvořte následující soubor PHP v kořenovém adresáři dokumentu /usr/share/nginx/html...

nano /usr/share/nginx/html/info.php

Nyní tento soubor nazýváme v prohlížeči (např. http://192.168.1.100/info.php):

Jak vidíte, PHP 5 funguje a funguje přes FPM/FastCGI, jak je znázorněno na řádku Server API. Pokud se posunete dále dolů, uvidíte všechny moduly, které jsou již povoleny v PHP5, včetně modulu MySQL:

Jak PHP-FPM používat Unix Socket

Ve výchozím nastavení PHP-FPM naslouchá na portu 9000 na 127.0.0.1. Je také možné, aby PHP-FPM používal Unixový soket, který se vyhýbá režii TCP. Chcete-li to provést, otevřete /etc/php-fpm.d/www.conf...

nano /etc/php-fpm.d/www.conf

... a řádek pro poslech nastavte následovně:

[...];listen =127.0.0.1:9000listen =/var/run/php-fpm/php5-fpm.sock[...]

Poté znovu načtěte PHP-FPM:

systemctl restart php-fpm.service

Dále si projděte konfiguraci Nginx a všechny své vhosty a změňte řádek fastcgi_pass 127.0.0.1:9000; na fastcgi_pass unix:/tmp/php5-fpm.sock;, např. takhle:

vi /etc/nginx/conf.d/default.conf
[...] umístění ~ \.php$ { root /usr/share/nginx/html; try_files $uri =404; fastcgi_pass unix:/var/run/php-fpm/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; zahrnout fastcgi_params; [...]]

Nakonec znovu načtěte Nginx:

systemctl restart nginx.service

Stáhnout tento server CentOS 7 jako virtuální počítač

Toto nastavení je dostupné jako stažení virtuálního stroje ve formátu ova/ovf (kompatibilní s VMWare a Virtualbox) pro předplatitele howtoforge.

Přihlašovací údaje pro virtuální počítač

  • Heslo uživatele root je:howtoforge
  • Heslo uživatele „administrátor“ je:howtoforge

Při prvním přihlášení změňte obě hesla.

  • IP adresa virtuálního počítače je 192.168.1.100
  • nginx:http://nginx.org/
  • nginx Wiki:http://wiki.nginx.org/
  • PHP:http://www.php.net/
  • PHP-FPM:http://php-fpm.org/
  • MySQL:http://www.mysql.com/
  • CentOS:http://www.centos.org/ 

Cent OS
  1. Jak nainstalovat LEMP Stack (Nginx, MySQL, PHP v7) na CentOS 7

  2. Jak nainstalovat Nextcloud s Nginx a PHP 7.3 na CentOS 8

  3. Jak nainstalovat Linux, Nginx, MariaDB, PHP (LEMP Stack) v CentOS 7 / RHEL 7

  1. Jak nainstalovat ownCloud 9.1 s Nginx a MariaDB na CentOS 7

  2. Jak nainstalovat WordPress s HHVM a Nginx na CentOS 7

  3. Jak nainstalovat Nginx s PHP a MySQL (LEMP Stack) na CentOS 7

  1. Jak nainstalovat OwnCloud 8 s Nginx a MariaDB na CentOS 7

  2. Jak nainstalovat Lighttpd s PHP-FPM a MariaDB na CentOS 7

  3. Jak nainstalovat Apache, PHP 7.1 a MySQL na CentOS 7.3 (LAMP)