- nginx под Windows
- Как установить и запустить Nginx на Windows 10
- Скачать Nginx:
- Установка и запуск Nginx:
- Nginx запуск на Windows 10:
- Настройка Nginx:
- Царский блог
- Философия программирования
- nginx+php-fpm под Windows
- nginx
- PHP-FPM для Windows
- Установка и настройка 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 на Windows 10
В этой статье мы разберём, как установить Nginx на Windows 10 и запустить его, также эта инструкция подойдёт для Windows 7 и Windows 8.
Ещё перед этой статьи, прочитаете «Как установить Apache на Windows»,это если вам нужен будет Apache.
Скачать Nginx:
Перед тем как установить, нужно скачать Nginx, переходите по этой ссылки, там скачаете архив с ним.
Как видите я скачал стабильную версию, и вам тоже рекомендую так именно её, так как, основной могут быть баги.
После того как скачали, открываем архив и папку внутри, перемешаем в папку которую вам надо, но я рекомендую в «Program Files», иначе придётся ещё добавлять Nginx в директиву «path».
Установка и запуск Nginx:
После того, как вы переместили, заходите в папку и Nginx и запускаем файл «nginx.exe», по двойному клику левой кнопки мыши.
Тут стоит сказать, что при установки у вас не чего не появится и это может смутить, но чтобы убедится, видите в адресную строку браузера «http://localhost/», должно появится вот это.
Если у вас именно это, то значит всё работает так как надо.
Nginx запуск на Windows 10:
Единственное что стоит сказать, при перезагрузки компьютера или выключение и включение, сервер перестают работает, чтобы это исправить, есть два способа, первый через встроенный Windows server, но его я не буду, так как, он достаточно сложный и на мой взгляд не очень удобный, второй, это просто отправить на рабочий стол, в качестве ярлыка файл «nginx.exe».
Теперь вы можете спокойно запускать его с рабочего стола.
Настройка Nginx:
Последние что стоит рассказать, это то, как его настроить что бы было ещё удобрение, для этого заходим в папку со сервером и там переходим в «conf», и открываем файл «nginx.conf».
Единственное, что стоит в нём изменить, это грубо говоря массив «location», который указывает настройки для стартовой страницы сервера, надо изменить значение у ключа «root», в качестве значения используете путь до папки с вашим сайтом.
Царский блог
Философия программирования
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
Для удобства примем то, что я пользую сейчас:
Создаём папку 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-модули по вкусу, расскоментировав их в соотв. секции и произвести другие настройки.
Установка и настройка 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 — это веб-сервер. Похоже на сайте, на который вы пытаетесь зайти, он просто некорректно настроен. Сообщите администрации этого ресурса и они внесут правки в конфиг сервера и всё снова будет работать.