- nginx под Windows
- nginx for Windows
- How to Install and Run the Nginx Server on Windows 10
- Download the Nginx Server
- Installing Nginx
- Running Nginx on Your Windows PC
- Summary
- 8 comments
- Popular Posts
- Установка и настройка nginx + php под Windows
- Шаг 1. Подготовка к установке
- Шаг 2. Загрузка необходимых компонентов
- Шаг 3. Установка компонентов
- Шаг 4. Создание скриптов запуска и остановки
- Шаг 5. Настройка nginx
- Шаг 6. Настройка php и безопасность
- Шаг 7. Обработка нескольких PHP-файлов одновременно
- Шаг 8. Тестирование и заключение
- Шаг 9. Готовые примеры файлов конфигурации
- 68 комментариев к записи
nginx под Windows
Версия nginx под Windows использует “родной” Win32 API (не эмуляцию Cygwin). В настоящий момент в качестве методов обработки соединений используются select() и poll() (1.15.9), поэтому не стоит ожидать высокой производительности и масштабируемости. В силу этого и ряда других известных проблем версия nginx под Windows рассматривается пока как бета-версия. На данный момент в ней доступна практически вся функциональность, что и в версии nginx под UNIX, за исключением XSLT-фильтра, фильтра изображений, модуля GeoIP и встроенного языка Perl.
Чтобы установить nginx/Windows, скачайте дистрибутив последней основной версии (1.19.10), поскольку основная ветвь nginx содержит все известные исправления. Затем распакуйте дистрибутив, перейдите в каталог nginx-1.19.10 и запустите nginx . Вот пример для корневого каталога на диске C:
Чтобы увидеть процессы nginx, запустите утилиту командной строки tasklist :
Один из процессов главный, другой — рабочий. Если nginx не запускается, нужно искать причину в в файле лога ошибок logs\error.log . Если же лог-файл не создался, то причину этого следует искать в Windows Event Log. Если вместо ожидаемой страницы выводится страница с ошибкой, нужно также искать причины ошибки в файле logs\error.log .
nginx/Windows использует каталог, в котором он был запущен, в качестве префикса для относительных путей в конфигурации. В вышеприведённом примере префиксом является C:\nginx-1.19.10\ . Пути в конфигурационном файле должны задаваться в UNIX-стиле с использованием прямых слэшей:
nginx/Windows работает как стандартное консольное приложение (не сервис) и управляется при помощи следующих команд:
nginx for Windows
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.19.10), since the mainline branch of nginx contains all known fixes. Then unpack the distribution, go to the nginx-1.19.10 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.19.10\ . 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:
How to Install and Run the Nginx Server on Windows 10
Nginx is a web server that is very popular with Linux and BSD systems. Many assume it is not possible to install Nginx on Windows. That is not true at all because the web server can indeed be installed on Windows 10.
However, according to Nginx’s own website, there are a few performance limitations that have not been mitigated so far. These include only one worker (web application) running successfully, a lack of scalability and possible UDP authentication issues.
As of now, Nginx has mentioned that it will address all the problems in its future releases for Windows. To install and run Nginx successfully on Windows 10, follow the steps below.
Download the Nginx Server
There are many Windows download versions of Nginx, and Nginx recommends using the “mainline version.” However, you will not find any issues if you download its most recent stable version for Windows.
Select the latest zip file and download it to a new folder.
As a first step, you need to extract the new folder. You can use 7-zip, WinRAR or any other popular compression software.
After extracting the file contents in the original folder, you have to move the entire folder that came with the built-in download copy. We will have to move this to “Program Files.”
Paste the folder in the program files. We will run Nginx from this location as a default web service program.
Installing Nginx
To install and run Nginx, select and double-click the Nginx.exe file. It has now been activated for further use.
In the next step you need to verify if the installation has been successful. For this, you can go to your default browser and type “localhost.” If you see the following screen saying Nginx web server is successfully installed and working, there are no problems in your Windows 10 installation.
To stop Nginx, you can end it from the Task Manager window.
Running Nginx on Your Windows PC
To run Nginx, you have to use Internet Information Services (IIS), which is a Microsoft web server that serves requested HTML pages or files. You can enable it from “Turn Windows Features On or Off” on the Control Panel. Check the required fields for “Web Management Tools” and “IIS Management Console.”
It will take a while for IIS to be enabled on your computer as the changes are applied.
You can open IIS Manager directly from the Start menu. Here, you will be able to access the default website, which is is usually located at “inetpub wwwroot.” This is also known as the web application root.
It is helpful to change the physical path of this root to a more desirable folder. I created a new “Work” folder in C:\ and changed the physical path to “C:\Work.”
After this, go to the Nginx folder that you renamed in the Program files. Click “Conf” and select “nginx.conf.” This file can be edited using the Notepad++ text editor.
In Notepad++, change the root to the edited physical path which we discussed above.
You can edit the index.html file in the root folder in a separate tab. Change the text to what you want the web server to display on the screen.
Now, run the Nginx.exe program once again and type “localhost” on a browser window. The Nginx web server will highlight the edits you made.
Nginx resources site has a full list of web server applications which you can use to run various applications on Windows PC.
Summary
Nginx is one of the leading web server companies which is expected to overshadow Apache in the future. Also, it is faster, can handle more concurrent issues and is reliable. To summarize, if you have a simple website you want to connect to Nginx, you can do it right now without any problems.
Have you tried installing and running Nginx on Windows systems? What were the issues you faced? Do let us know in the comments.
Sayak Boral is a technology writer with over ten years of experience working in different industries including semiconductors, IoT, enterprise IT, telecommunications OSS/BSS, and network security. He has been writing for MakeTechEasier on a wide range of technical topics including Windows, Android, Internet, Hardware Guides, Browsers, Software Tools, and Product Reviews.
8 comments
This is complete nonsense… All your doing is using Windows built-in IIS webserver and pointing it to the NGinx directory.. So IIS is service the content, NOT Nginx!
Thank you for your feedback.
It is true that IIS is in the background but Nginx is the one handling all the actual LIVE traffic based on the visible changes that you can see in nginx.conf files. For this, Nginx has to connect internally to IIS and then cache its response for any future requests. Imagine tens of thousands of your website users downloading an important pdf document from IIS at the same time, it can become painfully slow. Instead if you have a very powerful front-end server like Nginx handling the traffic, the request is processed faster.
Leave aside IIS, some actual popular websites use Ngnix as a front-ending server with Apache which is its biggest competitor. Why? Because, Nginx is generally faster than Apache.
No, No ,No. This is completely incorrect.
You cannot have two webservers binded on the same port and nothing in your article above suggests that IIS is running on a different port nor that nginx is making calls to it. Your nginx configuration file, as shown above, states that the nginx server process is listening on port 80 and serving the contents inside the root folder C:\Work, nothing more. So when you open the browser to localhost, it is nginx that is serving the html file directly from C:\Work. It is not ‘talking internally to IIS’ as you suggest.
Installing and running IIS is completely unnecessary in the scenario your article above describes. What you’re describing in your article and what you replied to Kelvin are two completely different use cases of nginx.
Thank you for sharing this update, I just want to known about logs how we can monitor load balancing via ngnix.
And same help me how setting up https .
Hi load balancing is a separate topic. Thanks for the suggestion.
Thank you for your immediate response, Could you please help me load balancing for 2 application server via nginx,
why not just use WSL? This seems like a waste of time.
This is a demo of Nginx’s capability in Windows. But your suggestion is well-taken and I’d like to thank you for the topic idea.
Comments are closed.
Popular Posts
6 Ways to Check Hard Disk Health on Windows 10
8 Ways to Quickly Turn Off Your Screen in Windows 10
Latest Windows 10 Update Problems and How to Fix Them
13 Cool 4K Desktop Backgrounds for Windows 10
5 of the Best Ebook Readers for Windows 10
How to Remove Old and Useless Drivers in Windows 10
5 Lightweight Browsers for Windows 10
Find and Open Files Using Command Prompt in Windows 10
How to Increase the Maximum Volume in Windows 10
How to Fix Webcam or Camera Not Working in Windows 10
Affiliate Disclosure: Make Tech Easier may earn commission on products purchased through our links, which supports the work we do for our readers.
Установка и настройка nginx + php под Windows
Из данного HOWTO Вы узнаете как установить и настроить связку nginx + php (в режиме FastCGI) + СУБД MySQL для работы под операционной Microsoft Windows.
Мы подробно рассмотрим вопросы установки, базовой и расширенной настройки, а также безопасности.
В статье приводятся примеры скриптов запуска и остановки, а также примеры файлов конфигурации nginx и php.
Подробности смотрите под катом.
Шаг 1. Подготовка к установке
Для начала рекомендуем в корне системного диска создать каталог nginx (например, c:\nginx\), а в нём подкаталоги public_html, php и mysql. Лучше всего связка работает, когда все основные компоненты находятся в одном каталоге. В каталог php мы будем устанавливать интерпретатор PHP5, в mysql соответственно данную СУБД, а в public_html — файлы главного сайта.
Разместив все компоненты таким образом, Вы сделаете пакет перемещаемым (Portable) и готовым к работе с любого компьютера.
Шаг 2. Загрузка необходимых компонентов
Нам потребуются следующие компоненты:
- PHP — http://windows.php.net/download/. Вам необходимо скачать версию с инсталлятором (*.msi) в варианте Thread Safe;
- MySQL — http://dev.mysql.com/downloads/mysql/. Также скачайте версию с msi-инсталлятором;
- nginx — http://nginx.org/ru/download.html. Скачайте последнюю версию;
- RunHiddenConsole — http://redmine.lighttpd.net/attachments/660/RunHiddenConsole.zip.
Шаг 3. Установка компонентов
По окончании скачивания приступайте к установке компонентов согласно данному алгоритму:
- распакуйте архив с nginx в созданный на шаге 1 каталог в корне (например, c:\nginx\). Далее в данном HOWTO будет использоваться именно этот каталог, поэтому если Вы изменили путь, сделайте соответствующие правки;
- установите PHP в каталог c:\nginx\php\:
- на этапе выбора типа установки (Web Server Setup) обязательно выберите вариант «Other CGI«, иначе модули, необходимые для работы PHP в режиме FastCGI не будут установлены;
PHP — Web Server Setup
на этапе выбора необходимых модулей (Choose Items to Install) обязательно выберите MySQL, MySQLi и OpenSSL (если хотите далее настроить SSL). Также рекомендуется выбрать модули, необходимые для большинства CMS: bzip2, Curl, Exif, GD2, Gettext, XML. Если Вы забыли что-то нужное и оно Вам потребуется, Вы всегда сможете доустановить/удалить эти компоненты, снова запустив программу установки PHP и выбрав пункт Change.PHP — выбор компонентов
Шаг 4. Создание скриптов запуска и остановки
Для быстрого запуска набора Вам потребуется создать в каталоге c:\nginx\ 3 файла: start.cmd, shutdown.cmd и restart.cmd, предназначенные соответственно для запуска, остановки и перезапуска серверов.
Листинг файла start.cmd (запуск сервера):
Листинг файла shutdown.cmd (остановка сервера):
Листинг файла restart.cmd (перезапуск сервера):
Если Вы изменили путь со стандартного C:\nginx\, на что-то другое, внесите соответствующие правки в скрипты.
Если требуется запускать сервер nginx+php+mysql при загрузке системы, то добавьте задание на автозапуск скрипта start.cmd с помощью оснастки Назначенные задания Windows.
Шаг 5. Настройка nginx
Откройте файл c:\nginx\conf\nginx.conf в любом текстовом редакторе (я рекомендую Notepad++).
1. Измените строку:
Здесь вместо 1 укажите количество рабочих процессов nginx. Рекомендуется указывать число, равное количеству ядер процессора.
2. Уберите символ комментария (решётку) у строки:
Это позволит включить запись логов ошибок в файл error.log, который Вы всегда найдёте в каталоге c:\nginx\logs\.
3. Измените значение директивы server<> для nginx без использования SSL:
Если Вы хотите использовать SSL, Вам потребуется совсем иной конфиг:
Здесь C:/nginx/private/ssl_cert_domain.pem — файл сертификата SSL, а C:/nginx/private/ssl_cert_domain.key — закрытый ключ для него. Внимание! При старте сервера у Вас запросят пароль для расшифровки закрытого ключа, поэтому чтобы не вводить его постоянно, во время создания (получения) сертификата оставьте поле ввода пароля пустым (это конечно небезопасно, но экономит время во время запуска сервера). В новых версиях возможно появится функция указания пароля в конфиге (как у Apache).
Вы можете включить ведение логов доступа (access.log), убрав символ комментария у строки #access_log logs/access.log main;.
Вы также можете переопределить страницы ошибок 404, 500, 502, 503, 504 и 403 путём указания в директиве error_page кода ошибки и имени файла, который будет отображаться при её возникновении.
Шаг 6. Настройка php и безопасность
Откройте текстовый файл C:\nginx\php\php.ini в любом текстовом редакторе. Из соображений безопасности рекомендуем изменить строку
Также найдите в файле строку
и замените её на следующую:
Эти действия включат безопасный режим для PHP (Safe Mode), при котором запрещены большинство небезопасных функций и исполнение файлов, а также отключит ряд потенциально уязвимых функций. Внимание! Если Ваша CMS не работает при включённом режиме PHP Safe Mode, отключите его, либо поставьте правильную CMS ;-).
Если Вы являетесь разработчиком и хотите видеть ошибки и сообщения PHP, то найдите строку
и замените её на
Для исправления опасной уязвимости в PHP, позволяющей выполнять PHP-код из загружаемых файлов, найдите в php.ini строку
уберите символ комментария (;) около неё и замените на следующую:
Дальнейшие настройки файла изменять не требуется — всё уже настроено оптимально для большинства применений программой установки PHP.
Шаг 7. Обработка нескольких PHP-файлов одновременно
К сожалению, PHP в Windows не умеет создавать копии своих экземпляров, поэтому придётся заранее запускать несколько копий и описать их использование в конфиге nginx.
В файле start.cmd пропишите запуск php-cgi.exe на разные номера портов:
Запустите столько процессов, сколько вам потребуется (обычно достаточно 5-20). В нашем примере используется 5 экземпляров с номерами портов 9000 — 9004.
Откройте файл nginx.conf в текстовом редакторе и перед директивой server <> пропишите следующие строки:
Теперь откройте файл fastcgi_params и в самом начале пропишите следующее:
Обязательно уберите fastcgi_pass 127.0.0.1:9000; во всех директивах location.
Пример готового конфига nginx.conf:
Пример конфига, использующего SSL:
Пример файла fastcgi_params:
Шаг 8. Тестирование и заключение
Запустите серверы и создайте в каталоге C:\nginx\public_html\ файл test.php со следующим содержанием:
Откройте этот файл в браузере по адресу http://localhost/test.php и если Вы увидели информацию об установленном сервере, значит всё работает корректно и Вы можете приступать к использованию сервера.
Шаг 9. Готовые примеры файлов конфигурации
По многочисленным просьбам мы решили выложить примеры всех файлов конфигурации nginx в Git-репозитории. В данный момент доступно три разных готовых конфига:
- nginx_simple.conf — простейший конфиг для запуска одного сайта без поддержки SSL;
- nginx_ssl.conf — конфиг для запуска одного сайта с поддержкой SSL;
- nginx_vhosts.conf — специально настроенный конфиг с относительными путями, поддержкой SSL, виртуальных хостов (позволяет держать несколько сайтов на одном сервере) и отдельных логов.
Там же вы найдете готовые скрипты запуска и остановки сервера, а также файл конфигурации PHP.
68 комментариев к записи
А как заставить Nginx быть доступным из интернета?
1. Иметь белый (внешний) IP-адрес.
2. Открыть и пробросить порт 80 (и 443 в случае использования SSL) на роутере по протоколу TCP (иногда провайдер запрещает абонентам открывать привилегированные порты, поэтому может потребоваться написать у них заявление).
Ааааа.. ну я вообще то уже им написал, задал вопрос. жду ответа.
Скажите а в конфиге может где то свой ip прописать нужно?
Скажите а в конфиге может где то свой ip прописать нужно?
Ничего прописывать не нужно. По умолчанию сервер слушает все сетевые интерфейсы.
Привет! Уже прошло больше месяц с момента установки. Использую для собственных нужд, по минимуму, в принципе доволен. Однако, иногда бекенд падает. В логах все чисто.
Решил потестить… запустил сервер, открыл оперу (там есть класная фишка «обновлять каждые…») открыл 5 вкладок с сайтом и оставил их обновляться…
После +-20 000 запросов все 5 php-cgi.exe из процессов улетают.
Первое что приходит на ум — мониторить работу бекенда и в случае падения повторно запускать, но что то мне подсказывает, что это не лучший вариант решения проблемы =)
Что посоветуете?
После +-20 000 запросов все 5 php-cgi.exe из процессов улетают.
Оно не предназначено для таких нагрузок. Это же тестовый отладочный сервер.
Привет! Уже прошло больше месяц с момента установки. Использую для собственных нужд, по минимуму, в принципе доволен. Однако, иногда бекенд падает. В логах все чисто.
Первое что приходит на ум — мониторить работу бекенда и в случае падения повторно запускать, но что то мне подсказывает, что это не лучший вариант решения проблемы =)
Что посоветуете?
php-fpm, но, к сожалению, только для UNIX.
@Олег
Переменная PHP_FCGI_MAX_REQUESTS отвечает за количество запросов, которые обработает один процесс. В windows процессы автоматом не поднимаются, используйте spawn-php.py
@Олег
В windows процессы автоматом не поднимаются, используйте spawn-php.py
Как уже я несколько раз писал в комментариях, описанную в статье связку не следует использовать в продакшене. Если уж хочется держать сервер под Windows, то для запуска PHP лучше использовать Apache 2 бэкэндом с фронтендом в виде nginx.
Спасибо за описание директивы upstream backend
Он создает виртуальный диск?
Он создает виртуальный диск?
Нет конечно, т.к. не представляю зачем это может быть нужно. Но если хотите, можете добавить запуск утилиты subst в скрипты запуска и остановки.
Пример создания виртуального диска:
Для удаления созданного диска, используйте следующую команду (здесь Z: — буква виртуального диска):
На самом деле php-cgi для Windows можно заставить работать стабильно.
Давно пользуюсь сам (в том числе в продакшн).
Доступно на гитхабе: https://github.com/deemru/php-cgi-spawner
Давно пользуюсь сам (в том числе в продакшн).
Как у него с запуском от имени бесправных пользователей (как сделано в php-fpm под *никсами)?
deemru :
Давно пользуюсь сам (в том числе в продакшн).
Как у него с запуском от имени бесправных пользователей (как сделано в php-fpm под *никсами)?
Процессы php-cgi будут от имени запускающего php-cgi-spawner.
Так как bind локальный на 127.0.0.1, каких-то особых прав не требуется.
Процессы php-cgi будут от имени запускающего php-cgi-spawner.
Так как bind локальный на 127.0.0.1, каких-то особых прав не требуется.
Речь шла о запуске каждого сайта от имени своего пользователя с запиранием в chroot, т.к. при использовании единственного в случае взлома одного сайта пострадают все остальные на этой машине.
Речь шла о запуске каждого сайта от имени своего пользователя с запиранием в chroot, т.к. при использовании единственного в случае взлома одного сайта пострадают все остальные на этой машине.
Не вникал в тему, но, так как php-cgi исполняется от имени пользователя, скорее всего, единственный вариант, каждому пользователю иметь свой обработчик php на непересекающихся портах (9000, 9001, 9002 и т.д.).
Здравствуйте помогите примерно 4 дня назад при входе на сайт zaycev стала появляться
Welcome to nginx! If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
Никакой программы nginx я не ставил, читал в интернете о том как удалить (почистить файл hosts, сканировать и почистить компьютер программой spyhunter) но ничего не получилось
помогите удалить.
@Nikolaych123
Nginx — это веб-сервер. Похоже на сайте, на который вы пытаетесь зайти, он просто некорректно настроен. Сообщите администрации этого ресурса и они внесут правки в конфиг сервера и всё снова будет работать.