Версия 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)
в качестве метода обработки соединений. - Использование нескольких рабочих нитей внутри одного рабочего процесса.
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.
Do you need to get the Nginx web server up and running on your Windows server? As it turns out, getting Nginx installed and running on the Windows server platform is easier than ever. Here’s how to get it working on your system.
Head to the official download page to get Ngnix on your Windows Server. Once there, select the latest Windows version, and download it to your server. The download should be quick as it is not very large.
When the download is complete, open up Windows Explorer, and select the “Downloads” folder. Then, move the ZIP archive file into the “C:/” drive. Once the file is placed, open up the Powershell application. Powershell is required to configure the software.
Inside the Powershell app, install the “Expand-Archive” tool in Powershell with the following command.
Get-Command Expand-Archive
After installing Expand-Archive, extract the Nginx file you placed in “C:/.”
Expand-Archive -Path C:\nginx-1.23.2.zip -DestinationPath C:\ -Verbose
The extraction process should happen fast. When the process is complete, run the clear command to clear the prompt of all other commands. You can then run the cd command to move into the “nginx-1.23.2” folder.
clear
cd .\nginx-1.23.2\
Once inside of the folder, run the ls command to view all of the contents of the Nginx folder on the “C:/” drive on Windows Server. Nginx.exe should now be running in the background on Windows Server. You can check this with the GUI task manager included with Windows Server or the ps command in Powershell.
How to configure Nginx web server on Windows Server
The Nginx web server doesn’t require much configuration out of the box in Windows Server. However, we’ll still need to go over the basics (where the web server data is placed, etc.)
Nginx on Windows works a little differently than on Linux. Instead of the /var/www/
folder, Nginx sets itself up where it was initially launched. So, as Nginx was launched from C:\nginx-1.23.2\, the “HTML” folder in which web pages are served is located in:
C:\nginx-1.23.2\html\
Similarly, the configuration file folder for Nginx is located in C:\nginx-1.23.2\conf\
, the log files are stored in C:\nginx-1.23.2\logs\
, etc. To access these files for modification purposes, open Windows Explorer, select “C:\nginx-1.23.2\
” and go from there.
How to manage Nginx on Windows Server
You will need to know a few commands to manage the Nginx web server on Windows Server. To start, open up the Windows Explorer app and navigate to “C:\nginx-1.23.2”
Once you’ve accessed the folder, hold down the Shift key, and right-click on a blank space. Then, select “Open PowerShell window here.” Once Powershell is open, you can use the following commands to control Nginx.
./nginx.exe -s stop : Shut down the server fast.
./nginx.exe -s quit : Shut down the server "gracefully."
./nginx.exe -s reload : Change configuration, start a new process, etc.
./nginx.exe -s reopen : Run this to re-open log files.
How to edit the Nginx homepage on Windows Server
Like every web server, the Nginx web server provides a default “index.html” file. You can access this file at localhost/index.html. This file is the default page shown in the web directory when the address is specified.
For example, if you navigated to https://your-windows-server/somefolder/, it would automatically show you the “index.html” or “index.htm” file in that folder. If you’d like to customize the index.html file, do the following.
First, open Powershell. Then, use the cd command to access the Nginx folder on the “C:/” drive in Windows Server.
cd C:/nginx-1.23.2/
After accessing the Nginx folder on the “C:/” drive, you will need to load up the “html” folder. To do this, run the cd command again in the Powershell window.
cd html
You can open the “index.html” file inside the Notepad app for editing purposes. Once it is open, you can delete what Nginx puts and make your own custom page for your web server.
notepad index.html
Once you’ve finished editing your files in Notepad, you can save them by pressing Ctrl + S on the keyboard. This keyboard combination should save your edits to the “index.html” file.
When you’ve saved your edits, open a web browser and navigate to the following URL to view your handiwork.
http://your-windows-server-ip/
How to uninstall Nginx from your Windows Server
To uninstall Nginx from Windows Server, ensure that “nginx.exe” is no longer running. Once it is shut down, you can delete the Nginx folder in the “C:/” drive. However, ensure all data and configuration files are backed up before deleting them in case you wish to redeploy your web server later.
-
Скачиваем отсюда 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, и изменить это никак не получается
Installing and Running nginx
- Download nginx for Windows Download
- Extract the downloaded .zip file
- Rename the extracted folder nginx
- Copy the extracted nginx files to the desired location, for example C:\Program Files\nginx
- Open the nginx folder and double click nginx.exe to run the server
Adding PHP Support
- Download Microsoft Visual C++Download
- Download PHP for Windows (VC15 x64 NTS) Download
- Install Microsoft Visual C++
- Extract the downloaded .zip file
- Rename the extracted folder php
- Copy the extracted php folder to the desired location, for example C:\Program Files\PHP
- Open the php install location and right click in the white space while holding down the Shift key > Open PowerShell window here
- Paste the following command in the PowerShell window to start the PHP CGI process
.\php-cgi.exe -b 127.0.0.1:9123
- Open Windows Explorer and navigate to the nginx installation directory /conf
- Edit nginx.conf in a text editor
- Add the following lines inside the server object
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9123;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
} - Save the changes to nginx.conf
- Right click the Start button > Run > Type taskkill /f /im «nginx.exe» > Press Enter
- Double click nginx.exe to restart the process with PHP support
Running nginx Server on Startup
nginx doesn’t currently have the ability to run as a Windows service natively. A simple workaround is to create a scheduled task to start the nginx server on system startup
- Open notepad and paste the following into a blank text file
start «» /b «C:\Program Files\PHP\php-cgi.exe» -b 127.0.0.1:9123
start «» /b «C:\Program Files\nginx\nginx.exe» -c «C:\Program Files\nginx\conf\nginx.conf» - Save the text file as startup.bat in the nginx installation directory
- Click the Start button > Search Task > Click Task Scheduler
- Right click the Task Scheduler Library folder in the top left > Create Basic Task
- Name the task nginx startup > Click Next
- Select When the computer starts > Click Next
- Select Start a program > Click Next
- Click the Browse… button and navigate to C:\Program Files\nginx\startup.bat
- Set the Start in value to C:\Program Files\nginx > Click Next
- Click Finish
- Reboot to test that nginx with PHP support starts with the system on boot
Source: http://nginx.org/en/docs/windows.html