Версия nginx под Windows использует “родной” Win32 API (не эмуляцию Cygwin).
В настоящий момент в качестве методов обработки соединений используются
select()
и poll()
(1.15.9),
поэтому не стоит ожидать высокой производительности и масштабируемости.
В силу этого и ряда других известных проблем версия nginx под Windows
рассматривается пока как бета-версия.
На данный момент в ней доступна практически вся функциональность, что и
в версии nginx под UNIX, за исключением
XSLT-фильтра, фильтра изображений, модуля GeoIP и встроенного языка Perl.
Чтобы установить nginx/Windows, скачайте
дистрибутив последней основной версии (1.27.5),
поскольку основная ветвь nginx содержит все известные исправления.
Затем распакуйте дистрибутив, перейдите в каталог
nginx-1.27.5
и запустите nginx
.
Вот пример для корневого каталога на диске C:
cd c:\ unzip nginx-1.27.5.zip cd nginx-1.27.5 start nginx
Чтобы увидеть процессы nginx, запустите утилиту командной строки
tasklist
:
C:\nginx-1.27.5>tasklist /fi "imagename eq nginx.exe" Image Name PID Session Name Session# Mem Usage =============== ======== ============== ========== ============ nginx.exe 652 Console 0 2 780 K nginx.exe 1332 Console 0 3 112 K
Один из процессов главный, другой — рабочий.
Если nginx не запускается, нужно искать причину в
в файле лога ошибок logs\error.log
.
Если же лог-файл не создался, то причину этого следует искать
в Windows Event Log.
Если вместо ожидаемой страницы выводится страница с ошибкой, нужно также
искать причины ошибки в файле logs\error.log
.
nginx/Windows использует каталог, в котором он был запущен, в качестве
префикса для относительных путей в конфигурации.
В вышеприведённом примере префиксом является
C:\nginx-1.27.5\
.
Пути в конфигурационном файле должны задаваться в UNIX-стиле с использованием
прямых слэшей:
access_log logs/site.log; root C:/web/html;
nginx/Windows работает как стандартное консольное приложение (не сервис)
и управляется при помощи следующих команд:
nginx -s stop быстрое завершение nginx -s quit плавное завершение nginx -s reload изменение конфигурации,
запуск новых рабочих процессов с новой конфигурацией,
плавное завершение старых рабочих процессовnginx -s reopen переоткрытие лог-файлов
Известные проблемы
-
Хоть и возможен запуск нескольких рабочих процессов, только один из них
реально работает. - UDP (и, как следствие, QUIC) не поддерживается.
Возможные усовершенствования в будущем
- Запуск в виде сервиса.
-
Использование портов завершения ввода-вывода (I/O completion ports)
в качестве метода обработки соединений. - Использование нескольких рабочих нитей внутри одного рабочего процесса.
-
Скачиваем отсюда https://nginx.org/ru/download.html и распаковываем куда-нибудь.
-
Дальше читаем тут https://nginx.org/ru/docs/windows.html
ВНИМАНИЕ: командуstart nginx
обязательно даем прямо из каталога, в котором лежит nginx.exe, в противном случае при дальнейшей работе будут ошибки (все пути в конфигурации прописаны как относительные, только поменяв их все, можно запускать откуда угодно).
Вообще рекомендуется держать консоль открытой в этом каталоге до самого конца выполнения инструкций, однако для работы nginx это необязательно — если её закрыть, он продолжит работать. -
Открываем http://localhost/ — должно заработать.
Установка PHP
-
Скачиваем с 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
перед последней закрывающей скобкой добавляем раздел:server { listen 80; server_name mysite; root D:\sites\mysite; }
-
В консоли, находясь в каталоге nginx.exe, даем команду
nginx -s reload
, чтобыnginx
перечитал конфигурацию. -
Открываем файл
C:\Windows\System32\Drivers\etc\hosts
, добавляем строчку127.0.0.1 mysite
Файл защищен системой ото всех пользователей, кроме администратора, поэтому перед записью понадобится открыть его свойства и дать там нужные права и потом вернуть, как было.
-
Открываем в браузере ссылку http://mysite/ (обязательно с
http://
, иначе браузер станет отправлять в поисковые системы). Должна отобразиться страница 404 от nginx.
Налаживание взаимодействия nginx и PHP
-
В раздел
server
конфигурации добавляем такие строки:location ~\.php$ { fastcgi_pass 127.0.0.1:9123; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
(
9123
— номер порта, можно выбрать какой-нибудь другой)Из консоли даем команду
nginx -s reload
. -
В консоли переходим в каталог, куда распакован PHP. Даем команду
php-cgi.exe -b 127.0.0.1:9123
Закрывать окно консоли нельзя, иначе интерпретатор PHP перестанет работать.
Можно прописать путь к каталогу PHP в системной переменной
PATH
и запускать его без указания полного пути. -
Создаем файл
D:\sites\mysite\test.php
со следующим содержимым:<?php echo "This is PHP script on mysite";
Открываем http://mysite/test.php — текст должен отображаться.
Взаимодействие налажено!
См. также https://www.nginx.com/resources/wiki/start/topics/examples/phpfastcgionwindows/
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
. Результат должен быть примерно следующим:Configuration File (php.ini) Path: C:\Windows Loaded Configuration File: {каталог с дистрибутивом PHP}\php.ini Scan for additional .ini files in: (none) Additional .ini files parsed: (none)
Вторая строчка говорит о том, что ini-файл успешно загрузился.
На первую строчку (про С:\Windows) внимания обращать не следует, т.к. ini-файла по указанном адресу нет.
-
Найти нужные расширения и раскомментировать строки, где они подключаются. Например,
extension=mysqli
и т.д.Все расширения перечислены рядом, и найти нужные среди них несложно. Рекомендуется включить следующие:
- curl
- fileinfo
- gd
- mbstring
- exif
- mysqli
- soap
Просмотреть список подключенных расширений можно, дав команду
php -m
. Непустой изначально список после вышеописанной манипуляции пополнится.
PHP загружает расширения при запуске exe-файла интерпретатора. Если нужно подключить новое, следует остановить php-cgi.exe
(или php.exe
соответственно) и запустить его заново.
PHP и MySQL
Чтобы установить связь между PHP и MySQL, не требуется никаких специальных действий, кроме собственно создания соединения (разумеется, должен быть включен соответствующий модуль, например, mysqli
).
Проверить соединение можно так:
echo "Connecting to MySQL server... "; // $host = 'localhost'; // если соединяемся через named pipe (аналог Unix-сокета), $host = "."; // то в качестве хоста указываем "." $user = "someone"; $password = "a password"; $mysqli = new mysqli($host, $user, $password); if ($mysqli->connect_error) echo $mysqli->connect_error; else echo "Connected successfully!";
Об установке и минимальной настройке MySQL под Windows см. здесь.
Неудобства работы под Windows
-
в путях файловой системы используется обратный слэш (
\
), а не прямой (/
) — типаD:\sites\mysite\...
вместо/sites/mysite/...
, что влияет, в частности, на содержимое констант__DIR__
и__FILE__
;
как следствие, весь код, рассчитанный на разбор пути по слэшу, перестаёт работать -
невозможно установить русскую локаль с UTF-8:
setlocale(LC_ALL, 'rus')
всегда приводит к использованию windows-1251, и изменить это никак не получается
Nginx — веб-сервер с открытым исходным кодом, разработанный Игорем Сысоевым в 2004 году. Nginx стал очень популярным, потому что он быстр, универсален и может использоваться в качестве веб-сервера и обратного прокси-сервера.
Одной из ключевых целей разработки Nginx является обеспечение высокой производительности и обработка большого количества одновременных подключений с минимальным использованием ресурсов. Nginx достигает этого за счет использования архитектуры, управляемой событиями, которая позволяет ему эффективно управлять подключениями без необходимости в большом количестве выделенных рабочих процессов. Кроме всего прочего, Nginx служит отличным выбором для отображения статического контента, а также изображений и других медиафайлов.
Nginx поддерживает широкий спектр протоколов, включая HTTP, HTTPS, WebSocket и другие. Такая гибкость позволяет использовать данный веб-сервер в самых разных приложениях, от обслуживания традиционного веб-контента до управления взаимодействием в режиме реального времени между клиентами и серверами.
В данном руководстве рассмотрим процесс установки и запуска веб-сервера Nginx на VDS, работающем под управлением Windows Server 2016.
Для установки Nginx перейдите на страницу загрузок и выберите либо актуальную стабильную, либо актуальную основную версию веб-сервера.
После окончания загрузки распакуйте архив, например, в каталог C:\nginx
. Затем откройте командную строку и перейдите в этот каталог.
cd C:\nginx
Далее, запустите Nginx при помощи следующей команды:
start nginx
Чтобы проверить работоспособность веб-сервера, откройте браузер и перейдите на страницу http://localhost
. При этом вы должны будете увидеть стартовую страницу Nginx. Если это так, значит, ваш веб-сервер работает.
Запуск Nginx как службы
По умолчанию, веб-сервер Nginx не функционирует в операционной системе как служба. Это означает, что при перезагрузке вашего VPS веб-сервер не запустится автоматически. Для запуска Nginx как службы необходимо будет воспользоваться сторонним ресурсом NSSM (Non-Sucking Service Manager).
Дистрибутив NSSM доступен по ссылке на странице загрузки.
Загруженный архив распакуйте, например, в каталог nssm
на диске C:\
виртуального сервера. После чего откройте командную строку и перейдите в каталог, в котором расположен файл nssm.exe
:
cd C:\nssm\win64
Затем установите Nginx в качестве сервиса при помощи следующей команды:
nssm install nginx C:\nginx\nginx.exe
После чего запустите установленный сервис:
nssm start nginx
Подключение к веб-серверу удалённо
Если вам нужно, чтобы веб-страница, запущенная с помощью Nginx открывалась не только с локального хоста, но и с любого другого узла, имеющего доступ в интернет, необходимо на виртуальном сервере добавить соответствующее правило в брандмауэр Windows. Для того, чтобы войти в настройки брандмауэра, в строке поиска наберите firewall
и запустите Windows Firewall with Advanced Security
.
В открывшемся окне брандмауэра перейдите в Inbound Rules
, затем кликните в New Rule...
После чего укажите тип создаваемого правила Program
и нажмите Next
.
Далее, в строке This program path
при помощи кнопки Browse
выберите файл nginx.exe
, после чего нажмите Next
.
В следующем окне укажите Allow the connection
и нажмите Next
.
Затем снова нажмите Next
перед этим отметив галочками все опции.
В строке Name
укажите имя создаваемого правила. В нашем примере мы назвали его Nginx web-server
. И для того, чтобы закончить настройку, нажмите Finish
.
После этого созданное правило появится в списке брандмауэра Windows.
Теперь вы сможете открыть вашу веб-страницу с любого компьютера, который имеет выход в интернет. Для этого достаточно набрать в браузере IP-адрес вашего VPS.
Возможные причины:
-
Превышение лимита трафика.
В этом случае необходимо увеличить тарифный план в биллинге, в разделе «сайты» — «подробно» формируете заявку на смену тарифного плана, в разделе «неподтверждённые заявки» в этой заявке будет рассчитана сумма доплаты необходимая для смены тарифа. Если в чём-то ошиблись, то данную заявку можете удалить и сформировать другую. Если в сформированной заявке всё правильно — подтверждайте её, при необходимости пополняйте баланс.
-
Закончился оплаченный период.
Продлите срок действия сайта в биллинге в разделе «сайты» — «подробно» укажите необходимое количество месяцев для продления и нажмите «продлить», сформированную заявку подтвердите в разделе «неподтверждённые заявки», при необходимости пополните баланс любым удобным способом в разделе «баланс».
Рекомендуем включить бесплатное SMS уведомление об изменении статуса услуг.
-
Нарушение правил хостинга.
Если возникли дополнительные вопросы — пишите в службу технической поддержки.
Есть нужен веб-сервер для Windows, идеально подойдет веб-сервер Nginx с подключенным PHP через FastCGI. В статье будет показана настройка и связка Nginx с PHP на примере Windows 11. Аналогично происходит настройка в Windows 7/8/10.
1. Структура каталогов под сервера
Удобно когда все сервера и сервисы установлены в отдельной папке. Я рекомендую сделать структуру аналогично моей.
Создаем на диске D:\ папку server (если диск один, то создаем на C). В папке server будет находится все что относится в веб-серверу, базы данных, файлы сайта.
Структура будет выглядеть так:
# Папка для серверов
D:\server\
# Папка для nginx
D:\server\nginx\
# Папка для PHP
D:\server\php\
# Папка для веб-сайтов
D:\server\www\
Создаем необходимые папки.
Подобная архитектура удобна тем, что все сервера находятся на отдельном диске в отдельной папке. Можно без проблем сделать резервное копирование, обновление серверов и так далее.
2. Установка и настройка nginx
2.1. Установка nginx
Заходим на официальный сайт Nginx https://nginx.org/ru/download.html и скачиваем последнею версию
Стабильная версия больше подойдет если nginx используется для рабочих веб-сайтов, а не используется для разработки, тестирования новых возможностей nginx.
Извлекаем скаченный архив в папку D:\server\nginx\
2.2. Конфигурация nginx (nginx.conf)
Теперь необходимо настроить сам nginx и его работу в связке с PHP.
Открываем файл конфигурации nginx.conf (в моем случае D:\server\nginx\conf\nginx.conf) и настраиваем веб-сервер nginx
# Базовый файл конфигурации nginx + PHP FastCGI
#user nobody;
worker_processes 1; # Количество запущенных процессов
#Лог ошибок
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024; # Количество подключений к одному процессу
}
http {
include mime.types;
default_type application/octet-stream;
# Лог доступа
access_log off;
#access_log logs/access.log main;
gzip on; # Использовать сжатие
# Разделов server может быть неограниченное количество
#
# Раздел server для домена сайта localhost по 80 порту
server {
listen 80; # Порт
server_name localhost; # Домен сайта
charset utf-8; # Кодировка сайта
error_log logs/localhost.error.log; # Лог ошибок сайта
access_log logs/localhost.access.log; # Лог доступа сайта
# Путь до папки сайта
root D:/server/www;
# Обработка всех URI запросов начинающихся с /
location / {
#root D:/server/www; # root определена в разделе server
index index.html index.php; # файлы в качестве индекса
}
# Настройка обработки php скриптов через PHP-FastCGI
#
# Обработка всех URI запросов оканчивающихся на .php
location ~ \.php$ {
# IP и порт PHP-FastCGI. С такими же параметрами нужно будет запускать php-cgi.exe
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
# Путь до php скриптов, $document_root - путь из параметра root (папка сайта)
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
Сохраняем и закрываем файл.
3. Установка и настройка PHP
3.1. Установка PHP
Заходим на сайт PHP https://windows.php.net/download и скачиваем последнею Non Thread Safe версию
Если в Windows не установлены Visual C++ Redistributable для Visual Studio 2015-2019, их необходимо скачать (vc_redist.x64.exe и vc_redist.x86.exe) и установить.
Извлекаем скаченный архив в папку D:\server\php\
3.2. Конфигурация PHP (php.ini)
По умолчанию в PHP содержатся два примера конфигурации php.ini-production и php.ini-development. Версия production используется для рабочих сайтов, в ней ошибки только записываются в лог файлы веб-сервера. Версия development используется при разработке, в ней ошибки выводятся на веб-страницу и записываются в лог файлы.
Копируем и переименовываем файл php.ini-production или php.ini-development в php.ini (это основной файл конфигурации PHP).
Открываем в тестовом редакторе файл php.ini (в моем случае D:\server\php\php.ini), находим параметр extension_dir и указываем папку с расширениями PHP
; Раскомментируем параметр для Windows (относительный путь)
extension_dir = "ext"
; Или можно указать полный путь до папки с расширениями
;extension_dir = "D:\server\php\ext"
Далее находим раздел Dynamic Extensions и включаем необходимые расширения
Сохраняем и закрываем файл.
4. Скрипты запуска и остановки веб-сервера
В папке D:\server\ будут находится скрипты для управления веб-сервером.
После запуска php-cgi.exe (PHP FastCGI), он будет работать в открытом окне консоли. Если это не желательно, скачиваем утилиту RunHiddenConsole.exe в папку D:\server\ и тогда дальнейший запуск php-cgi.exe будет происходить через данную утилиту.
Создаем скрипт запуску веб-сервера web-start.bat
:: Запуск PHP FastCGI
:: Если файл RunHiddenConsole.exe существует, то запускаем PHP через утилиту
if exist "RunHiddenConsole.exe" (
:: PHP будет запущен в скрытом режиме
RunHiddenConsole.exe "php\php-cgi.exe" -b 127.0.0.1:9000 -c "php\php.ini"
) else (
start php\php-cgi.exe -b 127.0.0.1:9000 -c "php\php.ini"
)
:: Запуск nginx
cd nginx
start nginx.exe
Создаем скрипт остановки веб-сервера web-stop.bat
taskkill /f /IM nginx.exe
taskkill /f /IM php-cgi.exe
Для удобства создаем скрипт перезапуска веб-сервера web-restart.bat
call web-stop.bat
call web-start.bat
В результате папка server выглядит следующим образом
5. Проверка веб-сервера nginx + PHP
Создаем в папке D:\server\www\ файл index.php следующего содержимого
<?php
phpinfo();
?>
Запускаем веб-сервер скриптом web-start.bat
Открываем в браузере http://localhost/ и если все нормально, будет выведена информация о PHP.
nginx в связке с PHP успешно установлены, настроены и работают.
Если что-то не работает, смотрим лог файлы nginx (D:\server\nginx\logs\) или запускаем PHP без скрытия консоли, чтобы увидеть ошибки в ней.