download.bg
 Вход Списание  Новини  Програми  Статии  Форум  Чат   Абонамент  Топ95   Архив 

Инсталиране на уеб сървър nginx + PHP на Windows (кратко ръководство)

Автор
Съобщение
programings
Нед, 03.02.13, 17:46
Здравейте!

Вчера ми се наложи да конфигурирам любимият ми nginx сървър под Windows, като до сега бях боравил с него само под Linux. Естествено, не се получи без ядове, които се изразяваха в това, че nginx - а не искаше да работи с PHP - то. След около час четене и пробване на различни варианти намерих решението, което сега ще пусна тук под формата на кратък урок с цел и вие да не ходите по мъките, и да си конфигурирате сървъра + PHP лесно и бързо на Windows.

И въпреки, че и най-лошият системен администратор знае, че е мазохизъм да хостваш сайт на Window$, все пак Nginx е супер решение за хостване на домашен сайт или просто личен сървър за програмиране на PHP и други.

Нека да започваме.

Като за начало трябва да си свалим nginx -а и PHP -то.
Това може да стане от официалният сайт на nginx и съответно от този на PHP за Windows рилийзите.

Актуалната версия към момента на nginx - а е 1.2.6, като все още няма експлойти за нея.

Правим си една папка с име nginx на дадено място (препоръчително да е на C:\ или D:\ с цел по лесен достъп), и разархивираме в нея съдържанието на архива, който свалихме от сайта на nginx.

Правим поддиректория с име php (тук нека задължително това да е името на папката, тъй като се упоменава в конфигурационният файл на nginx, и ако е с друго име няма да я намира), и разархивираме вътре цялото съдържание на архива, свален от сайта на PHP.

Вече имаме нужните файлове. Нека да направим конфигурацията.

От conf/ папката отваряме файла nginx.conf с любимият ни текстов редактор, и намираме следните редове, отговарящи за PHP :
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ .php$ {
#    root           html;
#    fastcgi_pass   127.0.0.1:9000;
#    fastcgi_index  index.php;
#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
#    include        fastcgi_params;
#} 
 

Първо се налага да разкоментираме кода за да стане той активен, и да се чете от сървъра.
След това да видим какви възможности имаме.

Първата настройка root ни дава възможност да сменим директорията в която по подразбиране са нашите файлове, които искаме сървъра да броудкаства в мрежата. Ако искате да е друга, просто я сменете.
По подразбиране nginx излъчва файловете от html директорията.

Втората настройка fastcgi_pass ни предлага да конфигурираме адреса и порта на които ще работи FastCGI - то на PHP. Препоръчително е да го оставите така.

fastcgi_index дава възможност да сменим подразбиращият си индекс, който да се приема за начало на нашият PHP сайт. По принцип index.php си е приет за начален файл, така че не го пипайте.

Тук идва най-деликатната настройка - fastcgi_param. През нея се посочва къде е FastCGI - то на PHP към което ще се подава кода от nginx за интерпретиране. Именно тази настройка ми създаваше ядове.
За да нямате проблеми, вместо да упоменавате точният път, най-добре е да го редактирате по следният начин:
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

Ето и целият блок, конфигуриран след нашата малка редакция:
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 
 location ~ .php$ {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

Така вместо вие да посочвате пътя, за това се грижи локалната за този конфигурационен файл променлива $document_root. Тя ще укаже нужният път до FastCGI скрипта, и няма да имате проблеми. Променливата $fastcgi_script_name е друга - тя указва името на PHP интерпретатора.

Така, ами с настройката на nginx сме почти готови.

Остана само да променим стандартният начален файл, който да се зарежда при повикване на сайта.

За това отговаря този ред от конфигурационният файл на nginx (ред 45) :
index  index.html index.htm;

Просто добавете index.php с една шпация разстояние след index.htm.
index  index.html index.htm index.php;

Това е, нека да запишем файла.

Сега може да отидем в директорията на PHP, и да намерим файла php.ini-production - това е стандартният ini файл без който PHP не може да работи. Нарочно е с такова име от съображения за сигурност, и не само. Просто го преименувайте на php.ini, и това е.

Изглежда вече сме готови за началният старт.

Как се изпълнява сървъра и FastCGI - то на PHP?

nginx може да изпълните от изпълнимият файл в директорията - nginx.exe.

FastCGI (php-cgi.exe) се стартира с команда, тъй като приема аргументи. Ето каква би била тя в нашият случай:
D:nginxphpphp-cgi.exe -b 127.0.0.1:9000 -c D:nginxphpphp.ini

Това при положение, че сме разархивирали в D:\. Иначе заместете с пътя до вашата директория.
Командата приема аргументи -b, който указва къде да слуша интерпретатора за инструкции, които да пресъздаде, и аргумент -c, който указва конфигурационният файл на PHP, въпреки, че може да се мине и без него в случая.

Ами нека да пуснем и двете неща, и вече трябва да си имаме собствен Nginx сървър + PHP, работещ и готов за ползване.

По принцип някой хора, включително и аз, намират процеса по стартиране на Nginx + php_cgi.exe за тромав, затова си правят два bat файла, чрез които с едно кликване да вършат всичко.

Ето например как може да си пускаме PHP + FastCGI едновременно с BAT:
@echo off
 
start /min D:nginxnginx.exe
start /min D:nginxphpphp-cgi.exe
или D:nginxphpphp-cgi.exe -b 127.0.0.1:9000 -c D:nginxphpphp.ini
ако държите да укажете всичко с аргументи.

За спиране просто убиваме процесите:
@echo off
taskkill /f /im nginx.exe
taskkill /f /im php-cgi.exe

Ами това е. Nginx си е в пъти по-добър от Apache лично за мен, заради бързината с която работи.
По принцип е създаден за да обслужва 10 000 конекции без проблем, и определено се справя.
На всичкото отгоре е писан и от руснак, което още повече прави нещата ясни.

Един пич (Милен Рангелов, gat3way) е показал нещата доста явно в сравнителен тест на Nginx срещу Apache - Nginx срещу Apache. Прочетете, пък си правете изводите.

Това е от мен.

* Добавете си чертите в командите там, където липсват. Системата на сайта ги strip-ва.

редактиран от programings на 03.02.13 17:48
редактиран от programings на 03.02.13 17:55
редактиран от programings на 03.02.13 18:04
phrozencrew
Нед, 03.02.13, 18:26
Браво! Полезно инфо!
За да се покажат наклонените черти, там където е една, поставяй по 2. Примерно:
или D:\\nginxphpphp-cgi.exe -b 127.0.0.1:9000 -c D:\\nginxphpphp.ini
или D:\nginxphpphp-cgi.exe -b 127.0.0.1:9000 -c D:\nginxphpphp.ini

programings
Нед, 03.02.13, 18:30
Свърши вече, няма как да се едитне.
За друг път ще знам. На някой от зелените ако му се занимава да ги оправи.
редактиран от programings на 03.02.13 18:31
svilen73
Нед, 03.02.13, 18:31
Браво!
Много полезно. За такива неща трябва да се пише тук.

Коментар

за нас | за разработчици | за реклама | станете автори | in english  © 1998-2019   Experta Ltd.