Установка связки Nginx+PHP+MySQL в Windows

Distructor
Администратор
http://sysoev.ru/nginx/docs/windows.html писал(а):nginx/Windows работает с Win32 API (не эмуляция Cygwin). В качестве метода обработки соединений используется select, поэтому не стоит ожидать высокой производительности и масштабируемости: пока это бета-версия. На данный момент доступна практически вся функциональность, что и в nginx/Unix, за исключением XSLT-фильтра, фильтра изображений, модуля geoip и встроенного perl'а.
Если несмотря на это Вы решили установить nginx под windows, то рассмотрим порядок установки.

Для сборки я использовал последние на текущий момент времени (2009-12-27) стабильные версии:
- nginx-0.7.64
- php-5.2.12-Win32-VC6-x86
- mysql-5.1.47-win32 ( можно скачать с http://dev.mysql.com/downloads/mysql/ )

Итак порядок установки:
- этап 1. Установка nginx
- этап 2. Установка MySQL
- этап 3. Установка и настройка PHP
- этап 4. Настройка nginx

Все эти этапы рассмотрены ниже.

UPD:
Добавлена инструкция по Установке связки nginx+Apache+PHP+MySQL в Windows

Ответы на Ваши вопросы по nginx:
Вопрос: Поддерживает ли nginx модуль mod_rewrite?
Ответ: Файлы .htaccess игнорируюся, все их правила в похожем синтаксисе описываются в конфиге, в том числе и перенаправления.

Copyright © 2009 Creaternal (v-tanke.ru).
При копировании информации ссылка на источник и указание copyright обязательны.
Вернуться к началу

Distructor
Администратор
Этап 1. Установка nginx

Для установки nginx достаточно распаковать nginx-0.7.64.zip в папку где у нас будет находиться веб-сервер.
В качестве примера взята папка C:\nginx и вся дальнейшая информация написана с учетом этого выбора.
Вы можете использовать C:\nginx, а можете указать и свою папку, тогда все места,
где встречается C:\nginx замените на свой путь.


UPD:
Опытным путем было выяснено, что под Windows Nginx должен быть обязательно установлен на диск C, иначе он не запускается.

Для простоты управления веб-сервером nginx создадим несколько bat файлов:
start.bat

Код: Выделить всё

@ECHO OFF
start c:\nginx\nginx.exe

ping 127.0.0.1 > NUL
echo Starting nginx
ping 127.0.0.1 > NUL
EXIT
stop.bat

Код: Выделить всё

@ECHO OFF
start c:\nginx\nginx.exe -s stop

EXIT
nginx_2_1.PNG
После этих действий можно запустить nginx и посмотреть как он работает (естественно, что пока мы не подключили php обрабатывать его файлы nginx не сможет)
Итак запускаем start.bat должно будет на некоторое время появиться окно
nginx_2_2.PNG
теперь можно идти в браузер и смотреть, что получилось.
Вводим в адресной строке http://localhost и получаем в ответ
nginx_2_3.PNG
На этом пока остановимся, выключим nginx (запустив stop.bat) и перейдем к следующему шагу

Copyright © 2009 Creaternal (v-tanke.ru).
При копировании информации ссылка на источник и указание copyright обязательны.
Вернуться к началу

Distructor
Администратор
Этап 2. Установка MySQL

создадим папку C:\nginx\mysql

запускаем mysql-5.1.41-win32.msi
mysql_1.PNG
нажимаем "Next"
mysql_2.PNG
выбираем режим "Custom", чтобы иметь возможность указать папки для установки и исключаем из установки документацию ("Documentation")
mysql_3.PNG
Затем выбираем пункт "MySQL Server" и нажимаем кнопку "Change...", и выбираем созданную нами ранее директорию C:\nginx\mysql.
Повторяем выбор директории и для пункта "MySQL Server Datafiles". После этого нажимаем "Next"
mysql_001.PNG
Просматриваем что все верно и жмем "Install"
теперь ждем пока MySQL установится
mysql_5.PNG
далее появляется рекламка, но она нам не интересна, поэтому пролистываем ее нажимая кнопку "Next"

после этого появляется окно с приглашением выполнить настройку MySQL и зарегистрировать его.
Регистрировать не будем, поэтому снимаем эту галочку и жмем кнопку "Finish"
mysql_7.PNG
Открывается окно настройки MySQL, жмем кнопку "Next"
mysql_8.PNG
Выбираем "Standard Configuration", жмем кнопку "Next"
mysql_9.PNG
Ничего не меняем, жмем кнопку "Next"
mysql_10.PNG
Далее нас просят указать пароль для пользователя root имеющего полные права на доступ и управление MySQL.
mysql_11.PNG
Запомните, а лучше даже запишите эти данные (логин - root, пароль - который Вы укажите),
т.к. эти они потребуются нам позже, при установке на веб-сервер какого-либо php-скрипта, работающего с базой данных.
mysql_12.PNG
Все готово к применению настроек жмем "Execute"

Если никаких проблем не возникло, должно результат должен быть как на картинке ниже
mysql_13.PNG
жмем кнопку "Finish"

На этом установка MySQL оканчивается, переходим к следующему этапу

Copyright © 2009 Creaternal (v-tanke.ru).
При копировании информации ссылка на источник и указание copyright обязательны.
Вернуться к началу

Distructor
Администратор
Этап 3. Установка и настройка PHP

Распакуем php-5.2.12-Win32-VC6-x86.zip в C:\nginx\php

Скопируем C:\nginx\php\php.ini-recommended в C:\nginx\php\php.ini
Далее переходим к редактированию C:\nginx\php\php.ini
Правка php.ini
Внимание! По умолчанию вывод ошибок на страницах отключен.
Вывод ошибок, рекомендуется включать только для тестирования и отладки скриптов. Для включения необходимо
заменить

Код: Выделить всё

display_errors = Off
на

Код: Выделить всё

display_errors = On
Далее увеличиваем ограничения на вложения
заменить

Код: Выделить всё

post_max_size = 8M
на

Код: Выделить всё

post_max_size = 30M
заменить

Код: Выделить всё

upload_max_filesize = 2M
на

Код: Выделить всё

upload_max_filesize = 20M
Затем указываем директорию с расширениями - заменяем

Код: Выделить всё

extension_dir = "./"
на

Код: Выделить всё

extension_dir = "./ext"
После этого подключаем необходимые расширения, найдя и раскомментировав (убрав ";" вначале строки) следующие строки

Код: Выделить всё

;extension=php_gd2.dll
;extension=php_mbstring.dll
;extension=php_sockets.dll
;extension=php_mysql.dll
;extension=php_mcrypt.dll
;extension=php_zip.dll
Дорабатываем .bat файлы созданные на первом этапе
start.bat

Код: Выделить всё

@ECHO OFF
start c:\nginx\nginx.exe
start c:\nginx\php\php-cgi.exe -b 127.0.0.1:521 -c c:\nginx\php\php.ini
ping 127.0.0.1 > NUL
echo Starting nginx
ping 127.0.0.1 > NUL
EXIT
stop.bat

Код: Выделить всё

@ECHO OFF
taskkill /f /IM nginx.exe
taskkill /f /IM php-cgi.exe
EXIT
Теперь при запуске start.bat вместе с nginx будет запускаться и php.
Внимание! После запуска start.bat появляется консольное окно php-cgi, которое не надо закрывать

Если открытое окно мешает можно воспользоваться следующим способом:
Вариант скрытого запуска php-cgi от Иванова Игоря (kindling_f)
1. Скачать программу chp.exe http://www.commandline.co.uk/chp/
2. Разместить chp.exe в каталоге с nginx (c:\nginx\chp.exe)
3. Модифицировать start.bat следующим образом:

Код: Выделить всё

@ECHO OFF
start c:\nginx\nginx.exe
chp.exe "c:\nginx\php\php-cgi.exe -b 127.0.0.1:521 -c c:\nginx\php\php.ini"
ping 127.0.0.1 > NUL
echo Starting nginx
ping 127.0.0.1 > NUL
EXIT
Еще один вариант (chp.exe под Windows7 у меня не заработал)
1. Скачать программу Hidden Start http://www.ntwind.com/software/hstart.html
2. Разместить hstart.exe в каталоге с nginx (c:\nginx\hstart.exe)
3. Модифицировать start.bat следующим образом:

Код: Выделить всё

@ECHO OFF
start c:\nginx\nginx.exe
start c:\nginx\hstart.exe /NOCONSOLE "c:\nginx\php\php-cgi.exe -b 127.0.0.1:521 -c c:\nginx\php\php.ini"
ping 127.0.0.1 > NUL
echo Starting nginx
ping 127.0.0.1 > NUL
EXIT
Далее создадим в папке C:\nginx\html (являющеюся на данный момент корневой для веб-сервера) файл test.php следующего содержания

Код: Выделить всё

<?php phpinfo(); ?>
После запускаем наш веб-сервер, через файл start.bat и открываем в браузере адрес http://localhost/test.php
nginx_3.PNG
Как вы можете видеть nginx отдал php-файл как обычный текстовый,
потому что мы еще не сказали ему как с ними работать ;).

Итак на этом этап настройки php можно считать оконченным, остановить веб-сервер, используя файл stop.bat и переходить к настройке nginx

Copyright © 2009 Creaternal (v-tanke.ru).
При копировании информации ссылка на источник и указание copyright обязательны.
Вернуться к началу

Distructor
Администратор
Этап 4. Настройка nginx

Так как, скорее всего, наиболее популярным будет вопрос по созданию виртуальных хостов в nginx, сразу рассмотрим как их сделать на примере установки phpMyAdmin на отдельный хост.

Файл с основным конфигом nginx у нас находится в папке C:\nginx\conf и называется nginx.conf.
Создадим папки, которые будут корневыми для наших виртуальных хостов: C:\nginx\html\default и C:\nginx\html\pma

Итак приступим к настройке.
Пропишем в C:\WINDOWS\system32\drivers\etc\hosts имя хоста для доступа к phpMyAdmin

Код: Выделить всё

127.0.0.1       pma
может потребовать перезагрузить браузер или компьютер если изменения в файле hosts не подхватятся сразу

Заменим содержимое C:\nginx\conf\nginx.conf на

Код: Выделить всё


worker_processes  1;

error_log  logs/error.log;
pid        logs/nginx.pid;

events {
    worker_connections  64;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user "$request" $status "$http_referer" "$http_user_agent"';
    
    sendfile        on;
    #tcp_nopush     on;
    
    client_header_timeout  3m;
    client_body_timeout    3m;
    send_timeout           3m;
    
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;


    server {
        root                 html/default/;
        set  $root_for_cgi   "c:/nginx/html/default/";
        listen               80;
        server_name          _;
        
        access_log logs/default.access.log main;
        error_log logs/default.error.log error;
    
        location / {
            index index.php;
        }
        
        location ~* .php$ {
            include fastcgi;
        }
    }
    
    server {
        root                 html/pma/;
        set  $root_for_cgi   "c:/nginx/html/pma/";
        listen               80;
        server_name          pma;
        
        access_log logs/pma.access.log main;
        error_log logs/pma.error.log error;
    
        location / {
            index index.php;
        }
        
        location ~* .php$ {
            include fastcgi;
        }
    }
    
    
    upstream  backend  {
        server   127.0.0.1:521;
    }

}

и создадим файл C:\nginx\conf\fastcgi

Код: Выделить всё

fastcgi_connect_timeout 1;
fastcgi_next_upstream timeout;

fastcgi_param  SCRIPT_FILENAME  $root_for_cgi$fastcgi_script_name;

fastcgi_pass   backend;

fastcgi_param  QUERY_STRING     $query_string;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;
Для теста перенесем в папку C:\nginx\html\default файл C:\nginx\html\test.php созданным на прошлом этапе.
А в папке C:\nginx\html\pma создадим файл test2.php

Код: Выделить всё

<?php echo 'For phpMyAdmin'; ?>
Теперь запускаем наш веб-сервер (через файл start.bat) и смотрим что получилось:
res1.PNG
res2.PNG
Теперь нам остается поставить phpMyAdmin и проверить работоспособность MySQL.
Распаковываем содержимое архива в папку C:\nginx\html\pma

и пробуем обратиться к http://pma. У нас спросят логин и пароль от MySQL
pma1.PNG
Вводим "root" и пароль, который задали на втором этапе, при установке MySQL, и попадаем в phpMyAdmin
pma2.PNG
http://php-myadmin.ru/learning/instrument-pma.html писал(а):Увидев на главной странице phpMyAdmin информационное сообщение: "Версия клиентской библиотеки MySQL (5.0.51a) отличается от версии установленного MySQL-сервера (5.1.41). Это может привести к некорректной работе." - не пугайтесь, на установленной нами пятой ветке MySQL все будет работать как надо.
Теперь у нас есть работающий вер-сервер :)
Почитать про директивы конфига nginx можно в официальной документации http://sysoev.ru/nginx/docs/

UPD:
Добавлена инструкция по Установке связки nginx+Apache+PHP+MySQL в Windows

Copyright © 2009 Creaternal (v-tanke.ru).
При копировании информации ссылка на источник и указание copyright обязательны.
Вернуться к началу

Distructor
Администратор
Distructor писал(а):Опытным путем было выяснено, что под Windows Nginx должен быть обязательно установлен на диск C, иначе он не запускается.
В новых версиях (проверил на nginx/Windows-1.0.11) это замечание не актуально. Устанавливать можно на любой диск.

Также добавил описание использования "Hidden Start" для скрытого запуска процесса php-cgi, т.к. предложенный kindling_f вариант с CHP не заработал в Windows7.
Вернуться к началу