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

Instalace Nginx s podporou PHP5 (a PHP-FPM) a MySQL na CentOS 6.4

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ů. Tento tutoriál ukazuje, jak můžete nainstalovat Nginx na server CentOS 6.4 s podporou PHP5 (prostřednictvím PHP-FPM) a podporou MySQL.

Neposkytuji žádnou záruku, že to pro vás bude fungovat!

1 předběžná poznámka

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

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

php-fpm není k dispozici z oficiálních úložišť CentOS, ale z úložiště Remi RPM, které samo závisí na úložišti EPEL; obě úložiště můžeme povolit následovně:

rpm --import https://fedoraproject.org/static/0608B895.txt 
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6 -8.noarch.rpm
rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
yum instalace yum-priority

Upravte /etc/yum.repos.d/epel.repo...

vi /etc/yum.repos.d/epel.repo

... a přidejte řádek priority=10 do sekce [epel]:

[epel]name=Další balíčky pro Enterprise Linux 6 – $basearch#baseurl=http://download.fedoraproject.org/pub/epel/ 6/$basearchmirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearchfailovermethod=priorityenabled=1priority=10gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG -KEY-EPEL-6[...]

Poté proveďte totéž pro sekci [remi] v /etc/yum.repos.d/remi.repo, plus změna povolena na 1:

vi /etc/yum.repos.d/remi.repo
[remi]name=Les RPM de remi pour Enterprise Linux $releasever - $basearch#baseurl=http://rpms.famillecollet.com/enterprise /$releasever/remi/$basearch/mirrorlist=http://rpms.famillecollet.com/enterprise/$releasever/remi/mirrorenabled=1priority=10gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM -GPG-KEY-remifailovermethod=priority[remi-test]name=Les RPM de remi en test pour Enterprise Linux $releasever - $basearch#baseurl=http://rpms.famillecollet.com/enterprise/$releasever/test/$ basearch/mirrorlist=http://rpms.famillecollet.com/enterprise/$releasever/test/mirrorenabled=0gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

3 Instalace MySQL 5

Nejprve nainstalujeme MySQL 5 takto:

yum install mysql mysql-server

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

chkconfig --levels 235 mysqld na
/etc/init.d/mysqld start

Nyní zkontrolujte, zda je síť povolena. 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 *:mysql                       *:*                                           POSLECHNUTÍ  [ 9 / mé q před 17

Pokud ne, upravte /etc/my.cnf a zakomentujte možnost skip-networking:

vi /etc/my.cnf
[...]#skip-networking[...]

a restartujte server MySQL:

/etc/init.d/mysqld restart

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




POZNÁMKA: SPUŠTĚNÍ VŠECHNY ČÁSTI TOHOto skriptu JE DOPORUČUJEME PRO VŠECHNY MySQL
       SERVERY V PRODUKCI ! PROSÍM POČTĚTE KAŽDÝ KROK POZOR!


Aby se přihlásili do MySQL a zabezpečili je, budeme potřebovat aktuální
heslo pro uživatele root. Pokud jste právě nainstalovali MySQL a 
ještě nenastavili heslo kořenu , heslo bude prázdné,
tak měli stačí stisknout sem enter.

Enter aktuální heslo pro root (zadejte pro žádné): <-- ENTER
OK, úspěšně použité heslo, pokračujeme ...

Nastavení hesla root zajistí , že se nikdo nemůže přihlásit do MySQL
root uživatel bez správného oprávnění.

Nastavit heslo uživatele root? [A/N] <-- ZADEJTE
Nové heslo: <-- heslo yourrootsql
Zadejte znovu nové heslo: <-- heslo yourrootsql
Heslo úspěšně aktualizováno!
Opětovné načítání tabulek privilegií. .
 ... Úspěch!


Ve výchozím nastavení má instalace MySQL anonymního uživatele, který umožňuje 
přihlásit se do MySQL bez musí mít uživatelský účet vytvořené pro ně
. Toto je určeno pouze pro testování a aby instalace
byla o něco plynulejší. Měli byste je odstranit [A/N] <-- ENTER
 ... Úspěch!

Za normálních okolností by měl uživatel kořen povolit pouze připojení z 'localhost'. To
zajišťuje , že někdo nemůže odhadnout heslo root ze sítě.

Zakázat vzdálené přihlášení rootu? [A/N] <-- ENTER
 ... Úspěch!

Ve výchozím nastavení MySQL přichází s databází nazvanou 'test' , ke které má kdo
přístup. Toto je také je určeno pouze pro testování a mělo by se odstranit
před přemístěním do produkčního prostředí.

Odstranit testovací databázi a přistupovat k ní? [A/N] <-- ENTER
 - Odstranění testovací databáze...
 ... Úspěch!
 - Odebrání privilegií na testovací databázi...
 ... Úspěch !

Opětovné načtení tabulek privilegií zajistí , že všechny dosud provedené změny 
se okamžitě projeví.

Načíst tabulky privilegií teď teď? [A/N] <-- ENTER
 ... Úspěch!

Uklízení...



Vše hotovo! Pokud jste dokončili všechny výše uvedené kroky, vaše mySQL
instalace by nyní měla být zabezpečena.

Děkujeme za používání MySQL!


[[ e-mail chráněný] ~]#

4 Instalace Nginx

Nginx je k dispozici jako balíček pro CentOS 6.4 (od EPEL), který můžeme nainstalovat následovně:

yum nainstalovat nginx

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

chkconfig --levels 235 nginx na
/etc/init.d/nginx start

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

5 Instalace PHP5

Můžeme zajistit, aby PHP5 fungovalo v nginx prostřednictvím PHP-FPM (PHP-FPM (FastCGI Process Manager) je alternativní implementace PHP FastCGI s některými dalšími funkcemi užitečnými pro weby jakékoli velikosti, zejména 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 install php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-magickwand php-magpierss php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy

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.

APC lze nainstalovat následovně:

yum install php-pecl-apc

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

vi /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.)

Kromě toho, aby se předešlo chybám jako

[08-Aug-2011 18:07:08] Upozornění PHP:phpinfo():Není bezpečné spoléhat se 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:

chkconfig --levels 235 php-fpm na 
/etc/init.d/php-fpm start

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

6 Konfigurace nginx

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

vi /etc/nginx/nginx.conf

Konfigurace je snadno pochopitelná (více se o ní můžete dozvědět zde:http://wiki.codemongers.com/NginxFullExample a zde:http://wiki.codemongers.com/NginxFullExample2)

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ě:

vi /etc/nginx/conf.d/default.conf
[...]server { poslouchat 80; název_serveru _; #charset koi8-r; #access_log logs/host.access.log main; umístění / { root /usr/share/nginx/html; index index.php index.html index.htm; } chybová_stránka 404 /404.html; umístění =/404.html { root /usr/share/nginx/html; } # přesměrovat chybové stránky 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 nginx, 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:

/etc/init.d/nginx reload

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

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

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

Jak vidíte, PHP5 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:

7 Jak PHP-FPM používat Unixový soket

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...

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

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

[...];listen =127.0.0.1:9000listen =/tmp/php5-fpm.sock[...]

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

/etc/init.d/php-fpm reload

Dále projděte svou 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:/tmp/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:

/etc/init.d/nginx reload

  • 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/

O autorovi

Falko Timme je vlastníkem Timme Hosting (ultrarychlý webhosting nginx). Je hlavním správcem HowtoForge (od roku 2005) a jedním z hlavních vývojářů ISPConfig (od roku 2000). Přispěl také do O'Reillyho knihy „Linux System Administration“.


Cent OS
  1. Jak nainstalovat Laravel 5.x s Nginx a PHP-FPM 7.1 na CentOS 7

  2. Instalace Nginx s PHP5 (a PHP-FPM) a podporou MySQL (LEMP) na Ubuntu 14.04 LTS

  3. Instalace Lighttpd s podporou PHP5 (PHP-FPM) a MySQL na Ubuntu 14.04LTS

  1. Instalace Apache2 s podporou PHP5 a MySQL na OpenSUSE 13.1 (LAMP)

  2. Instalace Lighttpd s podporou PHP5 a MySQL na Ubuntu 10.04

  3. Instalace Lighttpd s podporou PHP5 (PHP-FPM) a MySQL na Ubuntu 12.04

  1. Instalace Nginx s PHP5 (a PHP-FPM) a podporou MySQL (LEMP) na Ubuntu 12.04 LTS

  2. Instalace Nginx s PHP5 (a PHP-FPM) a podporou MySQL (LEMP) na Ubuntu 13.04

  3. Instalace Nginx s podporou PHP5 a MySQL na Ubuntu 8.10