Установка nginx и php FastCGI под Windows 7

Давно я что то отказался от apache http server, потом как то делал связку nginx — apache + php
Но все это у меня как то не прижилось, поэтому будет делать сразу nginx – php-fpm (FastCGI Process Manager).
Устанавливать будем все это на ОС семейства Windows.

Что нам понадобиться и что мы имеем:
— OS: Windows 7
— nginx 1.5.1 под windows
— PHP 5.4.16 версия под windows
1. Что бы потом не было проблем с путями и потерей файлов, я рекомендую сделать архитектуру аналогично моей.
Создаем на диске D папке server в этой папке создаем папки nginx, php, html (там будет сайт). В последующим можно будет создать папку mysql, mail, ftp. И все серверы будет лежать в одной папке.
Получаем такую структуру:
D:\server\
D:\server\nginx\
D:\server\php\
D:\server\html\


2. Архив php-5.4.16-Win32-VC9-x86.zip распаковываем в D:\server\php\
Переименовываем файл php.ini-production или php.ini-development в php.ini (это файл конфигурации php).
Открываем файл php.ini раскомментируем параметр extension_dir (это путь к расширениям php). Если все по статье получится такого вида:
; Directory in which the loadable extensions (modules) reside.
; http://php.net/extension-dir
; extension_dir = "./"
; On windows:
extension_dir = "ext"
; Можно указать прямой путь d:\server\php\ext

Далее можно найти строчки extension и раскомментировать нужные строчки. Например нам нужна библиотека работы с изображениями GD, работа с многобайтными строками и MySQL
; Windows Extensions
;
;extension=php_bz2.dll
;extension=php_curl.dll
;extension=php_fileinfo.dll
extension=php_gd2.dll
;extension=php_gettext.dll
;extension=php_gmp.dll
;extension=php_intl.dll
;extension=php_imap.dll
;extension=php_interbase.dll
;extension=php_ldap.dll
extension=php_mbstring.dll
;extension=php_mysql.dll ; (будет удалено в PHP 5.5.0) используйте php_mysqli.dll
extension=php_mysqli.dll
;extension=php_openssl.dll

Файл php.ini можно было и не изменять, работала все бы и так. Просто сразу оговорил что бы дальше вопросов было меньше.

3. Теперь добавим в переменные среды пути к PHP и его расширениям.
Для этого открываем свойства моего компьютера. Далее «дополнительные параметры системы» — «переменные среды» — ищем в «системные переменные» переменную «Path» — «изменить» — в конец строчки прописываем:
d:\server\php;d:\server\php\ext

Пути разделяем точкой с запятой.

Перемеренные среды будут работать после перезагрузки системы.
4. Создаем файл php-cgi-start.cmd в папке d:\server\php\ следующего содержания
start php-cgi.exe -b 127.0.0.1:9000 -c d:\server\php\php.ini

Параметр -b указывает по какому ip и порту будет доступно, параметр -с указывает путь к файлу php.ini(если в переменных средах добавлены пути, файл найдется автоматически)
Запускаем php-cgi-start.cmd (Если ошибок нет, откроется пустое консольное приложение)
Все php в режиме FastCGI заработал. В службы из коробки добавить нельзя.

5. Архив php-5.4.16-Win32-VC9-x86.zip распаковываем в D:\server\nginx\
Открывается файл nginx.conf (D:\server\nginx\conf\nginx.conf) – это файл конфигурации.
Нам нужно подключить php по FastCGI. Сама конфигурация, параметры смотрим на сайте разработчика nginx. Конфигурации сделана по минимуму на основе стандартной:
#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

events {
    worker_connections  1024;
}

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

    sendfile        on;

    # Время через которое будет закрыто соединение
    keepalive_timeout  65;
    
    # включить сжатие
    #gzip  on;

    server {
		# ip сервер и порт, в таком видел слушает все ip на 80 порту
        listen       80;
		# Имя сайта, то что в адресной строке. Если есть домен которые ссылается на ip где запущен nginx пишем его.
        server_name  localhost;
		# Кодировка сайта по умолчанию.
        charset utf-8;

		# Путь к всем статичным файлам, по умолчанию открываем index.html и index.php
        location / {
		# Путь к деректории которую создали раньше
		root   d:\server\html;
		index  index.html index.php;
		}
		
		# Файлы php обрабатываем через fastcgi_pass
		location ~ \.php$ {
		# ip и порт на котором работает php-fastcgi, такой же нужно будет указывать при запуске php-cgi.exe
		fastcgi_pass   127.0.0.1:9000;
		fastcgi_index  index.php;
		# Путь к директории где будут php файла, в большинстве случаев такая же как и в location /
		fastcgi_param  SCRIPT_FILENAME  d:\server\html$fastcgi_script_name;
		# Файл параметров FastCGI
		include        fastcgi_params;
		}

	}
}


Запускаем nginx.exe (d:\server\nginx\nginx.exe) – мигнет на секунду. Если ошибок нет то запуститься и будет в списке процессов. Если какая то ошибка, то читать логи.

6. Создаем файл index.php в папке d:\server\html содержания
<?php
phpinfo();
?>

Открываем localhost/ — видим информации о php. Все связка nginx – php успешно работает.
Теперь для удобства запуска и остановке веб-сервер создаем файл web-start.cmd в папке d:\server\ содержания:
start php\php-cgi.exe -b 127.0.0.1:9000 -c d:\server\php\php.ini
cd nginx
start nginx.exe

И файл web-stop.cmd содержания:
taskkill /f /IM php-cgi.exe
taskkill /f /IM nginx.exe

Для запуска используем web-start.cmd, а для остановки web-stop.cmd
Запускать можно по отдельности, как службу (используя сторонние ПО для запуска приложений не поддерживающие службы).
Дальше как говорится дело вкуса, а статья была о связи nginx с PHP напрямую.

Если есть вопросы с радостью отвечу в комментариях.
0.10
9.06.2013 20:03