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.servicePotom zkuste znovu spustit Nginx.
systemctl spustí nginx.serviceOtevř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 --reloadVý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-soapAPC 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.sona 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.servicePHP-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.confNejprve (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.serviceNyní vytvořte následující soubor PHP v kořenovém adresáři dokumentu /usr/share/nginx/html...
nano /usr/share/nginx/html/info.phpNyní 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.serviceDá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.serviceStá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
Odkazy
- 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/