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 Ubuntu 8.10 s podporou PHP5 (prostřednictvím FastCGI) a podporou MySQL.
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 Instalace MySQL 5.0
Abychom mohli nainstalovat MySQL, spustíme
apt-get install mysql-server mysql-client
Budete požádáni o zadání hesla pro uživatele root MySQL – toto heslo je platné pro uživatele [chráněno e-mailem] i [chráněno e-mailem], takže později nemusíme heslo root MySQL zadávat ručně:
Nové heslo pro uživatele "root" MySQL:<-- yourrootsqlpassword
Opakujte heslo pro uživatele "root" MySQL:<-- yourrootsqlpassword
3 Instalace Nginx
Nginx je k dispozici jako balíček pro Ubuntu 8.10, který můžeme nainstalovat následovně:
apt-get install nginx
Poté spusťte nginx:
/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:
Chcete-li, aby se nginx spustil při spouštění, spusťte
update-rc.d nginx defaults
4 Instalace PHP5
Můžeme zajistit fungování PHP5 v nginx prostřednictvím FastCGI. Naštěstí Ubuntu poskytuje balíček PHP5 s podporou FastCGI, který nainstalujeme takto (spolu s některými moduly PHP5, jako je php5-mysql, které potřebujete, pokud chcete používat MySQL z vašich skriptů PHP):
apt-get install php5-cgi php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
Poté otevřete /etc/php5/cgi/php.ini a přidejte řádek cgi.fix_pathinfo =1 přímo na konec souboru:
vi /etc/php5/cgi/php.ini
[...] cgi.fix_pathinfo = 1
Pro Ubuntu neexistuje žádný samostatný balíček démonů FastCGI, proto používáme program spawn-fcgi z lighttpd. Lighttpd nainstalujeme následovně:
apt-get install lighttpd
Zobrazí se chybová zpráva, že lighttpd nelze spustit, protože port 80 je již používán. Tak to má být, protože nginx již naslouchá na portu 80. Spustit
update-rc.d -f lighttpd remove
takže lighttpd se nespustí při spouštění.
Nainstalovali jsme lighttpd, protože potřebujeme pouze jeden program, který je součástí balíčku, /usr/bin/spawn-fcgi, který můžeme použít ke spuštění procesů FastCGI. Podívejte se na
spawn-fcgi --help
se o tom dozvíte více.
Chcete-li spustit démona PHP FastCGI, který naslouchá na portu 9000 na localhost a běží jako uživatel a skupina www-data, spustíme následující příkaz:
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid
Samozřejmě nechcete tento příkaz zadávat ručně, kdykoli spouštíte systém, takže chcete, aby systém provedl příkaz automaticky při spouštění, otevřete /etc/rc.local...
vi /etc/rc.local
... a přidejte příkaz na konec souboru (před výstupní řádek):
[...] /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid [...]
5 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é) zvyšte počet pracovních procesů a nastavte keepalive_timeout na rozumnou hodnotu:
[...] worker_processes 5; [...] keepalive_timeout 2; [...]
Virtuální hostitelé jsou definováni v kontejnerech serveru {}. Výchozí vhost je definován v souboru /etc/nginx/sites-available/default – upravme jej následovně:
vi /etc/nginx/sites-available/default
[...] server { listen 80; server_name _; access_log /var/log/nginx/localhost.access.log; location / { root /var/www/nginx-default; index index.php index.html index.htm; } location /doc { root /usr/share; autoindex on; allow 127.0.0.1; deny all; } location /images { root /usr/share; autoindex on; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/www/nginx-default; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { #proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name; include fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } } [...]
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 /var/www/nginx-default; znamená, že kořen dokumentu je adresář /var/www/nginx-default.
Důležitou součástí pro PHP je umístění ~ \.php$ {} stanza. Chcete-li ji aktivovat, odkomentujte ji. Ujistěte se prosím, že jste změnili řádek fastcgi_param na fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name; (nahraďte /var/www/nginx-default kořenovým adresářem dokumentu vašeho vhost), protože jinak PHP interpret nenajde PHP skript, který voláte ve vašem prohlížeči.
Ujistěte se, že mezi include a fastcgi_params jsou nějaké mezery; - ve výchozím souboru je to zapsáno jako jedno slovo, což je chyba.
Nyní uložte soubor a restartujte nginx:
/etc/init.d/nginx restart
Nyní vytvořte následující soubor PHP v kořenovém adresáři dokumentu /var/www/nginx-default:
vi /var/www/nginx-default/info.php
<?php phpinfo(); ?>
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 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:
6 odkazů
- nginx:http://nginx.net/
- nginx Wiki:http://wiki.codemongers.com/Main
- PHP:http://www.php.net
- MySQL:http://www.mysql.com
- Ubuntu:http://www.ubuntu.com/