Версия nginx под Windows использует “родной” Win32 API (не эмуляцию Cygwin). В настоящий момент в качестве методов обработки соединений используются select() и poll() (1.15.9), поэтому не стоит ожидать высокой производительности и масштабируемости. В силу этого и ряда других известных проблем версия nginx под Windows рассматривается пока как бета-версия. На данный момент в ней доступна практически вся функциональность, что и в версии nginx под UNIX, за исключением XSLT-фильтра, фильтра изображений, модуля GeoIP и встроенного языка Perl.
Чтобы установить nginx/Windows, скачайте дистрибутив последней основной версии (1.23.3), поскольку основная ветвь nginx содержит все известные исправления. Затем распакуйте дистрибутив, перейдите в каталог nginx-1.23.3 и запустите nginx . Вот пример для корневого каталога на диске C:
Чтобы увидеть процессы nginx, запустите утилиту командной строки tasklist :
Один из процессов главный, другой — рабочий. Если nginx не запускается, нужно искать причину в в файле лога ошибок logs\error.log . Если же лог-файл не создался, то причину этого следует искать в Windows Event Log. Если вместо ожидаемой страницы выводится страница с ошибкой, нужно также искать причины ошибки в файле logs\error.log .
nginx/Windows использует каталог, в котором он был запущен, в качестве префикса для относительных путей в конфигурации. В вышеприведённом примере префиксом является C:\nginx-1.23.3\ . Пути в конфигурационном файле должны задаваться в UNIX-стиле с использованием прямых слэшей:
nginx/Windows работает как стандартное консольное приложение (не сервис) и управляется при помощи следующих команд:
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». Если запуск прошел без ошибок, пропускаем следующий пункт.
Ищем на странице загрузки из п.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 и т.д.
Все расширения перечислены рядом, и найти нужные среди них несложно. Рекомендуется включить следующие:
- curl
- fileinfo
- gd2
- mbstring
- exif
- mysqli
- soap
Просмотреть список подключенных расширений можно, дав команду 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, и изменить это никак не получается
Version of nginx for Windows uses the native Win32 API (not the Cygwin emulation layer). Only the select() and poll() (1.15.9) connection processing methods are currently used, so high performance and scalability should not be expected. Due to this and some other known issues version of nginx for Windows is considered to be a beta version. At this time, it provides almost the same functionality as a UNIX version of nginx except for XSLT filter, image filter, GeoIP module, and embedded Perl language.
To install nginx/Windows, download the latest mainline version distribution (1.23.3), since the mainline branch of nginx contains all known fixes. Then unpack the distribution, go to the nginx-1.23.3 directory, and run nginx . Here is an example for the drive C: root directory:
Run the tasklist command-line utility to see nginx processes:
One of the processes is the master process and another is the worker process. If nginx does not start, look for the reason in the error log file logs\error.log . If the log file has not been created, the reason for this should be reported in the Windows Event Log. If an error page is displayed instead of the expected page, also look for the reason in the logs\error.log file.
nginx/Windows uses the directory where it has been run as the prefix for relative paths in the configuration. In the example above, the prefix is C:\nginx-1.23.3\ . Paths in a configuration file must be specified in UNIX-style using forward slashes:
nginx/Windows runs as a standard console application (not a service), and it can be managed using the following commands:
Подготовка директорий
C:\nginx (все что относится к серверу)
C:\nginx\bin (файлы для работы сервера)
C:\nginx\bin\nginx (сюда nginx)
C:\nginx\bin\php (сюда php)
C:\nginx\bin\mysql (сюда mysql либо mariadb)
C:\nginx\sites (тут будут сайты, у них буду свои директории в таком виде C:\nginx\sites\localhost, домены надо будет внести в hosts)
Настройка nginx
Один конфиг сервера Nginx для работы с несколькими сайтами (вся фишка в server_name и root)
Настройка php
- Заходим в директорию C:\nginx\bin\php и создаем копию файла php.ini-development с названием php.ini
- Устанавливаем путь для расширений. В php.ini находим строку ; extension_dir = “ext” и убираем знак комментария
3. Подключаем поддержку mysql pdo. В php.ini находим строку ;extension=php_pdo_mysql.dll и убираем знак комментария
Добавление php в переменные окружения
Для того чтобы в консоли можно было писать просто php, без полного пути к интерпретатору php, добавляем php в переменную окружения Path
- В поиске набираем Система (Панель управления\Все элементы панели управления\Система в проводнике)
- Выбираем Дополнительные параметры системы
- Выбираем Параметры среды…
- В параметрах находим Path, нажимаем Изменить
- Дописываем туда путь к директории php (у меня был C:\nginx\bin\php)
Настройка и установка mysql
Конфиг mysql. C:\nginx\bin\mysql\my.ini
Меняем пароль root для mysql. В консоли cmd вводим:
если служба mysqladmin не зарегистрирована, тогда устанавливаем её через переменные среды (как выше сделали с php) или пишем путь к ней вручную:
Настройка и установка mariadb (вместо mysql)
Ещё проще, скачиваем нужную версию в формате .msi, запускаем установку, выбираем для установки директорию C:\nginx\bin\mysql
Вносим домены в файл hosts
В директории C:\Windows\System32\drivers\etc находим файл hosts
В нём нужно добавить хосты наших сайтов/доменов (для каждого домена)
127.0.0.1 localhost
P.s. если не удается сохранить изменения, попробуйте скопировать этот файл на рабочий стол, сделайте изменения, сохраните и перенесите обратно в C:\Windows\System32\drivers\etc с заменой
Создание скриптов для управления сервером
Осторожно, Medium туповатый, три точки превращает в один символ троеточия…
Поправьте после копирования
C:\nginx\start.cmd (запуск nginx)
C:\nginx\stop.cmd (остановка nginx)
C:\nginx\restart.cmd (перезапуск nginx)
Запускаем start.cmd от имени администратора и наслаждаемся 🙂
Тестируем
Для начала протестим наши сайты/домены на открываемость
Отлично! Теперь добавим файлов и протестируем
Тестировать будем домен localhost, который находится в директории C:\nginx\sites\localhost
