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 17Pokud 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
8 odkazů
- 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“.