Nginx php cgi windows

wiki.sys-adm.org.ua

Инструменты пользователя

Инструменты сайта

Содержание

Nginx+php-cgi: настройка автоматического запуска при старте Windows

Введение

На одном из проектов мы используем windows server 2008 в качестве операционной системы, так как работа проекта связанна с конвертацией графических форматов, для чего мы используем Adobe Illustrator. К сожалению Inkskape/ImageMagick/GraphicsMagick, которые отлично работают на linux, нам не подходят из-за ряда проблем с конвертацией, так что приходится страдать. И вот появилась необходимость в использовании php. Вариантов как бы немного:

К сожалению, официальных сборок apache под windows больше не выпускает, последняя официальная сборка 2.2.25 от 2013 года. Но правда есть т.н. 3rd party сборки:

C IIS я работал очень мало, и честно говоря, особого желания нет. А вот опыт работы с nginx + php-cgi/fpm более чем достаточный. Так что остановился на этом варианте. Особенно учитывая тот факт, что в ближайшем будущем скорее всего будем мигрировать с Windows/AI на Linux/Inkskape/ImageMagick/GraphicsMagick/etc.

Казалось бы простая задача, установить и настроить nginx + php-cgi, которая в linux занимает 10-15 минут, на windows платформе заняла у меня на порядок больше времени из-за своей особенности и специфики.

Установка и настройка сервера php-cgi

Идем на страницу php.net и выбираем нужную версию php. PHP поставляется в двух вариантах

Если кратко, то TS версию следует использовать, если у вас php используется в качестве модуля apache. NTS версия должна быть использована, если вы используете php как cgi. Более подробно о различиях NTS от TS версии можно почитать на stackoverflow

Итак скачиваем архив, в моем случае это был файл php-5.6.21-nts-Win32-VC11-x86.zip и распаковываем в любое удобное для вас место. В рамках данной статьи я буду использовать следующий путь — C:\php-5.6.x-nts-vc11-x86\ . Так же для избежания множества ошибок, советую добавить данный путь в переменную окружения PATH.

Так же не забываем о том, что для корректной работы php необходимо установить пакет Visual C++ Redistributable for Visual Studio 2012, если у вас такой не стоит в системе, иначе при запуске будем получать ошибку вида

Проверяем что переменная PATH применилась и работает

После распаковки копируем файл php.ini-production в php.ini и правим под свои нужды. Ниже я приведу лишь те строки, которые я менял

Если вы все правильно настроили, то команда php-cgi.exe -m должна выдать примерно такой список

Если вы где то допустили ошибку, то в файле php-error.log появятся соответствующие предупреждения/ошибки. Например, ошибка вида

Если ошибок нет, то запускаем наш cgi сервер из командной строки

Теперь переходим к настройке nginx.

Установка и настройка nginx

Установка аналогична php, скачиваем архив с официального сайта, распаковываем в нужную нам папку, правим конфигурационный файл под свои нужды и запускаем. В рамках данной статьи я буду использовать следующий путь — C:\nginx-1.8.x\

Ниже привожу минимально необходимые настройки, которые необходимо внести в файл nginx.conf

После этого можно запустить nginx, для этого выполнив следующую команду

Не забываем открыть 80й порт

Проверяем в командной строке или в любом проводнике, если вы не используете cmder

Ну а для проверки php, создаем тестовый файл с выводом phpinfo. В результате мы должны увидеть примерно такую страницу

Настройка автоматического запуска при старте

Сама связка у нас настроена и работает, но проблема в том, что как только вы закроете сеанс или перезагрузите сам сервер, то придется заново запускать в ручном режиме, что очень не удобно, а иногда и не приемлемо. К сожалению сам php-cgi.exe и nginx.exe не поддерживают работу в виде службы, можно конечно использовать и сторонние утилиты, но большинство из них платные, или глючные. Немного поискав в google, нашел интересную утилиту от автора Jenkins — winsw (Windows Service Wrapper). Эта небольшая утилита

Читайте также:  Windows 10 темнеет экран ноутбука при зарядке

58 Кбайт, которая представляет собой один исполняемый файл — winsw-1.18-bin.exe.

Итак, для настройки нам необходимо скопировать winsw-1.18-bin.exe в папку с nginx.exe и переименовать во что то осмысленное (на самом деле переименовывать не обязательно, просто так будет удобней). Я буду использовать C:\nginx-1.8.x\winsw-nginx.exe для запуска nginx и C:\php-5.6.x-nts-vc11-x86\winsw-php.exe для запуска php-cgi.exe соответственно. После копирование файла в папки nginx и php создаем там же xml файлы с точно таким же названием как и сам exe — winsw-nginx.xml и winsw-php.xml с таким содержимым

Думаю xml говорит сам за себя, по сути мы указываем как и с какими параметрами нам надо запускать и останавливать нашу службу. Так как php-cgi.exe не имеет ключа для остановки, то приходится его останавливать при помощи taskkill, вот такая небольшая хитрость. Обратите внимание на то, что папка, указанная в logpath должна быть создана до запуска службы.

После этого необходимо создать сами службы, для этого выполним следующие команды

После чего, в Service Manager на закладке Services вы должны увидеть две новые службы

Запускаем соответствующие службы и проверяем работу. Так как Startup type у этих служб по умолчанию будет Automatic, то после перезагрузки сервера они запустятся автоматически.

Так же советую обратить внимание на утилиту nssm, которая имеет очень интересное описание

Так же представляет из себя один exe файл, и даже имеет графический интерфейс, мелочь, а приятно.

А нашел я ее случайно, когда начал поиск возможности запуска bitvise ssh клиента при старте системы. К сожалению с помощью winsw мне это сделать не получилось, а вот с помощью nssm все запустилось в течение 5 минут.

Царский блог

Философия программирования

nginx+php-fpm под Windows

nginx

Apache – король веб-серверов, если можно так сказать. Но на пятки ему наступает даже не IIS от Microsoft, не lighttpd, а nginx (произносится как Энджин-Икс, engine с английского мотор, двигатель) нашего соотечественника Сысоева.

Чем он хорош? Говорят, что статика отдаётся гораздо быстрее, чем у Апача, да и динамика я думаю тоже. Он жрёт меньше ресурсов, что может быть критически важно для нагруженных серверов. Раньше мнгоие применял связку nginx+Apache – nginx для отдачи статики (рисунков, js/css etc.), а Апач – для отдачи динамики (PHP/Perl/Python/Ruby etc.). Но теперь nginx можно применять без Апача, так как для него появилось куча плагинов и дополнений, поэтому вместо связки nginx+Apache+PHP (мы тут говорим о PHP-среде) легко настроить просто nginx+php-fpm. Ладно, об нём написано куча литературы, не буду повторяться, опишу лишь процесс установки nginx+php-fpm под Виндовс (Windows).

Хотя, конечно, nginx органичней всего чувствует себя в FreeBSD и Linux (любой Unix-среде, наверное), под Винду он тоже неплохо работает, по крайней мере я его у себя на домашнем компе установил, чтобы тестировать некоторые штуки.

Итак, процесс установки/первичной настройки. Этот процесс расписан здесь: http://nginx.org/ru/docs/windows.html
я приведу лишь выжимку.

Смотрим доступные версии nginx под windows здесь: http://nginx.org/en/download.html
Сейчас есть версия 1.8.0, несколько месяцев назад я устанавливал 1.6.2, которая и сейчас у меня работает.
Итак, скачиваем текущую версию под windows: http://nginx.org/download/nginx-1.8.0.zip

Читайте также:  Билайн ошибка 868 что делать windows 10

Для удобства примем то, что я пользую сейчас:
Создаём папку C:\usr. Заходим в неё и распаковываем nginx-1.8.0.zip здесь (это можно проделать через GUI-интерфэйс).
Затем запускам териминал и заходим:

Тут Виньда может выкинуть окошко с предупреждением (см. скриншот), что nginx пытается получить доступ в сеть. Мы конечно же разрешаем.

Проверяем, запущен ли nginx и видим результат:

Остановим nginx нормально: nginx -s quit. Есть ещё несколько полезных команд для nginx:
nginx -s stop – останов nginx в любом случае (применяется, если nginx -s quit не сработает).
nginx -s reload – перезагрузка .conf файлов (конфигурации)
nginx -s reopen – переоткрытие .log файлов (полезна, если мы удалили или переместили логи при работающем nginx).

Итак, мы остановили nginx сейчас, так как прежде чем его запускать, надо правильно настроить .conf файлы. Они расположены в папке conf. Стандартный файл настройки – nginx.conf, из него директивой include могут подсоединяться другие файлы из этой (впрочем, и из любой другой) папки.
Например, директива include mime.types; в секции http присоединит файл mime.types, в котором находится определения всех стандартных MIME-типов. Впрочем, сам конфиг я обсуждать здесь не буду, о нем много написано в инете, приведу лишь пример своего конфига с краткими пояснениями.

Предупреждение: это конфиг для моей домашней тестовой среды. Для рабочего сервера требуется более тонкая настройка.

Итак, в этом конфиге большинство настроек оставлено по умолчанию, а корень сайтов у нас в E:\sites, что в первую очередь делает команда root E:/sites. Обратите внимание на прямые слэши в стиле Unix в пути к папкам и файлам – это требование nginx, даже для Windows-версии.

Теперь можно запускать nginx (start nginx), если мы его останавливали перед этим, либо применить команду nginx -s reload, чтобы сервер перечитал конфиги без остановки своей работы, что полезно при работающем внешнем сайте.

Итак, теперь надо настроить PHP-FPM для Windows. Учтите, что мы уже в нашем конфиге сделали его поддержку на порту 9123 (под-секция location

PHP-FPM для Windows

1. Скачиваем свежий (или версию по выбору) .zip-архивчик с http://windows.php.net/download/. Архивчик должен быть VC11/VC9, что содержит в себе FastCGI-файл (phpcgi.exe).
2. Создаем папку в C:\usr, например с именем php-5.6.9 и распаковываем в неё содержимое архива.
3. Редактируем файл php.ini в соотв. со своими предпочтениями, единственное, убедиться, что у нас есть такая строка:

Она закрывает одну из старых уязвимостей nginx. Далее можно подключить PHP-модули по вкусу, расскоментировав их в соотв. секции и произвести другие настройки.

1234ru / nginx-php-win.md

Скачиваем отсюда https://nginx.org/ru/download.html и распаковываем куда-нибудь.

Дальше читаем тут https://nginx.org/ru/docs/windows.html ВНИМАНИЕ: команду start nginx обязательно даем прямо из каталога, в котором лежит nginx.exe, в противном случае при дальнейшей работе будут ошибки (все пути в конфигурации прописаны как относительные, только поменяв их все, можно запускать откуда угодно). Вообще рекомендуется держать консоль открытой в этом каталоге до самого конца выполнения инструкций, однако для работы nginx это необязательно — если её закрыть, он продолжит работать.

Открываем http://localhost/ — должно заработать.

Скачиваем с https://windows.php.net/download (ZIP-архив Non Thread Safe x64), замечаем номер в «VC(число)» — понадобится на следующем шаге. Прописываем каталог в PATH.

Открываем командную строку, запускаем php -v . Должно выскочить окно с надписью «The program can’t start because VCRUNTIME140.dll». Если запуск прошел без ошибок, пропускаем следующий пункт.

Читайте также:  Euus для windows 10

Ищем на странице загрузки из п.1 в левой колонке ссылку на VC нужного номера. Скачиваем x64.exe, устанавливаем. После этого возвращаемся на предыдущий пункт. На этот раз команда должна показать версию php.

Конфигурация локального сайта в nginx

Выбираем локальное имя хоста (как localhost , только какое-то другое, например, mysite ) и каталог, где будут находиться его файлы (например, D:\sites\mysite ).

В конец файла (каталог nginx)/nginx.conf перед последней закрывающей скобкой добавляем раздел:

В консоли, находясь в каталоге nginx.exe, даем команду nginx -s reload , чтобы nginx перечитал конфигурацию.

Открываем файл C:\Windows\System32\Drivers\etc\hosts , добавляем строчку

Файл защищен системой ото всех пользователей, кроме администратора, поэтому перед записью понадобится открыть его свойства и дать там нужные права и потом вернуть, как было.

Открываем в браузере ссылку http://mysite/ (обязательно с http:// , иначе браузер станет отправлять в поисковые системы). Должна отобразиться страница 404 от nginx.

Налаживание взаимодействия nginx и PHP

В раздел server конфигурации добавляем такие строки:

( 9123 — номер порта, можно выбрать какой-нибудь другой)

Из консоли даем команду nginx -s reload .

В консоли переходим в каталог, куда распакован PHP. Даем команду

Закрывать окно консоли нельзя, иначе интерпретатор PHP перестанет работать.

Можно прописать путь к каталогу PHP в системной переменной PATH и запускать его без указания полного пути.

Создаем файл D:\sites\mysite\test.php со следующим содержимым:

Открываем http://mysite/test.php — текст должен отображаться.

PHP: ini-файл и модули расширений

Вышеуказанные процедуры позволяют успешно запустить и использовать PHP, однако он будет «голым» — без расширений (в т.ч. таких необходимых, как mysqli , mbstring и др.) и без настроек, т.к. он не прочитает ни одного ini-файла.

PHP может автоматически загрузить файл php.ini из нескольких каталогов. Первое место, где он станет его искать — рядом с php.exe . В пакете есть файл php.ini-development . Нужно создать рядом его копию с именем php.ini , открыть и внести следующие изменения:

Раскомментировать строку extension_dir = «ext» — в результате PHP станет искать модули расширений в подкаталоге ext рядом с php.exe
(относительный путь интерпретируется именно от exe-, а не от самого ini-файла)

Проверяем, подключился ли файл, с помощью команды php —ini . Результат должен быть примерно следующим:

Вторая строчка говорит о том, что ini-файл успешно загрузился.

На первую строчку (про С:\Windows) внимания обращать не следует, т.к. ini-файла по указанном адресу нет.

Найти нужные расширения и раскомментировать строки, где они подключаются. Например, extension=mysqli и т.д.

Все расширения перечислены рядом, и найти нужные среди них несложно. Рекомендуется включить следующие:

Просмотреть список подключенных расширений можно, дав команду php -m . Непустой изначально список после вышеописанной манипуляции пополнится.

PHP загружает расширения при запуске exe-файла интерпретатора. Если нужно подключить новое, следует остановить php-cgi.exe (или php.exe соответственно) и запустить его заново.

Чтобы установить связь между PHP и MySQL, не требуется никаких специальных действий, кроме собственно создания соединения (разумеется, должен быть включен соответствующий модуль, например, mysqli ).

Проверить соединение можно так:

Об установке и минимальной настройке MySQL под Windows см. здесь.

Неудобства работы под Windows

в путях файловой системы используется обратный слэш ( \ ), а не прямой ( / ) — типа D:\sites\mysite\. вместо /sites/mysite/. , что влияет, в частности, на содержимое констант __DIR__ и __FILE__ ;
как следствие, весь код, рассчитанный на разбор пути по слэшу, перестаёт работать

невозможно установить русскую локаль с UTF-8: setlocale(LC_ALL, ‘rus’) всегда приводит к использованию windows-1251, и изменить это никак не получается

Оцените статью