- nginx под Windows
- Как установить и запустить Nginx на Windows 10
- Скачать Nginx:
- Установка и запуск Nginx:
- Nginx запуск на Windows 10:
- Настройка Nginx:
- Царский блог
- Философия программирования
- nginx+php-fpm под Windows
- nginx
- PHP-FPM для Windows
- 1234ru / nginx-php-win.md
- Django CMS Обучение
- среда, 26 декабря 2012 г.
- Установка Nginx под Windows
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-модули по вкусу, расскоментировав их в соотв. секции и произвести другие настройки.
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 и т.д.
Все расширения перечислены рядом, и найти нужные среди них несложно. Рекомендуется включить следующие:
Просмотреть список подключенных расширений можно, дав команду 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, и изменить это никак не получается
Django CMS Обучение
среда, 26 декабря 2012 г.
Установка Nginx под Windows
Чтобы установить nginx/Windows, скачайте дистрибутив с сайта nginx.org. Затем распакуйте дистрибутив, перейдите в каталог nginx-1.3.10 и запустите nginx. Вот пример для корневого каталога на диске C:
cd c:\
unzip nginx-1.3.10.zip
cd nginx-1.3.10
start nginx
(Опытным путем было выяснено, что в тарых версиях под Windows Nginx должен быть обязательно установлен на диск C, иначе он не запускается. Но в новых версиях (проверил на nginx/Windows-1.0.11) это замечание не актульно. Устанавливать можно на любой диск.)
В результате выполнения данных команд запустится сервер Nginx.
Проверить его работу вы можете в браузере, перейдя по адресу http://localhost
Чтобы увидеть процессы nginx, запустите утилиту командной строки tasklist:
C:\nginx-1.3.10>tasklist /fi «imagename eq nginx.exe»
C:\nginx-1.3.10>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.3.10\. Пути в конфигурационном файле должны задаваться в UNIX-стиле с использованием прямых слэшей:
access_log logs/site.log;
root C:/web/html;
nginx/Windows работает как стандартное консольное приложение (не сервис) и управляется при помощи следующих команд:
nginx -s stop быстрое завершение
nginx -s quit плавное завершение
nginx -s reload изменение конфигурации, запуск новых рабочих процессов с новой конфигурацией, плавное завершение старых рабочих процессов
nginx -s reopen переоткрытие лог-файлов
Для простоты управления веб-сервером nginx создадим несколько bat файлов в папке сервера C:\nginx-1.3.10:
@ECHO OFF
start C:\nginx-1.3.10\nginx.exe
ping 127.0.0.1 > NUL
echo Starting nginx
ping 127.0.0.1 > NUL
EXIT
@ECHO OFF
start C:\nginx-1.3.10\nginx.exe -s stop
@ECHO OFF
start C:\nginx-1.3.10\nginx.exe -s reload
При запуске файла start.bat на некоторое время появится окно, показывающее, что серевер запускается.
Создадим папку C:\nginx-1.3.10\mysql
Скачиваем MySQL установщик mysql-5.1.41-win32.msi и запускаем его.
Выбираем режим «Custom», чтобы иметь возможность указать папки для установки и исключаем из установки документацию («Documentation»).
Затем выбираем пункт «MySQL Server» и нажимаем кнопку «Change. «, после чего выбираем созданную нами ранее директорию C:\nginx-1.3.10\mysql.
Повторяем выбор директории и для пункта «MySQL Server Datafiles». После этого нажимаем «Next».
Просматриваем, что все верно и жмем «Install».
Теперь ждем пока MySQL установится.
Далее появляется рекламка, но она нам неинтересна, поэтому пролистываем ее нажимая кнопку «Next».
После этого появляется окно с приглашением выполнить настройку MySQL и зарегистрировать его.
Регистрировать не будем, поэтому снимаем эту галочку и жмем кнопку «Finish».
Открывается окно настройки MySQL, жмем кнопку «Next».
Выбираем «Standard Configuration», жмем кнопку «Next».
Далее ничего не меняем, жмем кнопку «Next».
После этого нас просят указать пароль для пользователя root имеющего полные права на доступ и управление MySQL.
Запомните, а лучше даже запишите эти данные (логин — root, пароль — который Вы укажите), так как они потребуются нам позже, при установке на веб-сервер какого-либо php-скрипта, работающего с базой данных.
Все готово к применению настроек жмем «Execute».
Если никаких проблем не возникло, должно результат должен быть как на картинке ниже.
Жмем кнопку «Finish»
На этом установка MySQL оканчивается.
Скачаем и распакуем php-5.2.12-Win32-VC6-x86.zip в C:\nginx-1.3.10\php
Скопируем C:\nginx-1.3.10\php\php.ini-recommended в C:\nginx-1.3.10\php\php.ini
Далее переходим к редактированию C:\nginx-1.3.10\php\php.ini
Внимание! По умолчанию вывод ошибок на страницах отключен.
Вывод ошибок рекомендуется включать только для тестирования и отладки скриптов. Для включения необходимо заменить
Код:
display_errors = Off
Код:
display_errors = On
Далее увеличиваем ограничения на вложения
заменить
Код:
post_max_size = 8M
Код:
post_max_size = 30M
Код:
upload_max_filesize = 2M
Код:
upload_max_filesize = 20M
Затем указываем директорию с расширениями — заменяем
Код:
extension_dir = «./ext»
После этого подключаем необходимые расширения, найдя и раскомментировав (убрав «;» вначале строки) следующие строки
Код:
;extension=php_gd2.dll
;extension=php_mbstring.dll
;extension=php_sockets.dll
;extension=php_mysql.dll
;extension=php_mcrypt.dll
;extension=php_zip.dll
Дорабатываем .bat файлы созданные на первом этапе.
@ECHO OFF
start C:\nginx-1.3.10\nginx.exe
start C:\nginx-1.3.10\php\php-cgi.exe -b 127.0.0.1:521 -c c:\nginx\php\php.ini
ping 127.0.0.1 > NUL
echo Starting nginx
ping 127.0.0.1 > NUL
EXIT
@ECHO OFF
taskkill /f /IM nginx.exe
taskkill /f /IM php-cgi.exe
EXIT
Теперь при запуске start.bat вместе с Nginx будет запускаться и PHP.
Внимание! После запуска start.bat появляется консольное окно php-cgi, которое не надо закрывать!
Если открытое окно мешает можно воспользоваться следующим способом:
Вариант скрытого запуска php-cgi.
1. Скачать программу chp.exe http://www.commandline.co.uk/chp/
2. Разместить chp.exe в каталоге с nginx ( C:\nginx-1.3.10\chp.exe)
3. Модифицировать start.bat следующим образом:
Код:
@ECHO OFF
start C:\nginx-1.3.10\nginx.exe
chp.exe » C:\nginx-1.3.10\php\php-cgi.exe -b 127.0.0.1:521 -c C:\nginx-1.3.10\php\php.ini»
ping 127.0.0.1 > NUL
echo Starting nginx
ping 127.0.0.1 > NUL
EXIT
Еще один вариант (но chp.exe под Windows 7 не заработал).
1. Скачать программу Hidden Start http://www.ntwind.com/software/hstart.html
2. Разместить hstart.exe в каталоге с nginx (C:\nginx-1.3.10\hstart.exe)
3. Модифицировать start.bat следующим образом:
Код:
@ECHO OFF
start C:\nginx-1.3.10\nginx.exe
start C:\nginx-1.3.10\hstart.exe /NOCONSOLE «C:\nginx-1.3.10\php\php-cgi.exe -b 127.0.0.1:521 -c C:\nginx-1.3.10\php\php.ini»
ping 127.0.0.1 > NUL
echo Starting nginx
ping 127.0.0.1 > NUL
EXIT
Далее создадим в папке C:\nginx-1.3.10\html (являющеюся на данный момент корневой для веб-сервера) файл test.php следующего содержания:
После запускаем наш веб-сервер, через файл start.bat и открываем в браузере адрес http://localhost/test.php
Как вы можете видеть nginx отдал php-файл как обычный текстовый,
потому что мы еще не сказали ему как с ними работать.
Итак, на этом этап настройки php можно считать оконченным, остановить веб-сервер, используя файл stop.bat и переходить к настройке nginx.
Так как, скорее всего, наиболее популярным будет вопрос по созданию виртуальных хостов в Nginx, то сразу рассмотрим как их сделать на примере установки phpMyAdmin на отдельный хост.
Файл с основным конфигом nginx у нас находится в папке C:\nginx-1.3.10\conf и называется nginx.conf.
Создадим папки, которые будут корневыми для наших виртуальных хостов: C:\nginx-1.3.10\html\default и C:\nginx-1.3.10\html\pma
Итак приступим к настройке.
Пропишем в C:\WINDOWS\system32\drivers\etc\hosts имя хоста для доступа к phpMyAdmin.
Может потребовать перезагрузить браузер или компьютер, если изменения в файле hosts не подхватятся сразу.
Заменим содержимое C:\nginx-1.3.10\conf\nginx.conf на код:
error_log logs/error.log;
pid logs/nginx.pid;
events <
worker_connections 64;
>
http <
include mime.types;
default_type application/octet-stream;
log_format main ‘$remote_addr — $remote_user «$request» $status «$http_referer» «$http_user_agent»‘;
sendfile on;
#tcp_nopush on;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server <
root html/default/;
set $root_for_cgi «C:/nginx-1.3.10/html/default/»;
listen 80;
server_name _;
access_log logs/default.access.log main;
error_log logs/default.error.log error;
location / <
index index.php;
>
server <
root html/pma/;
set $root_for_cgi «C:/nginx-1.3.10/html/pma/»;
listen 80;
server_name pma;
access_log logs/pma.access.log main;
error_log logs/pma.error.log error;
location / <
index index.php;
>
upstream backend <
server 127.0.0.1:521;
>
И создадим файл C:\nginx-1.3.10\conf\fastcgi с кодом:
fastcgi_connect_timeout 1;
fastcgi_next_upstream timeout;
fastcgi_param SCRIPT_FILENAME $root_for_cgi$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
Для теста в папке C:\nginx-1.3.10\html\default создадим файл C:\nginx-1.3.10\html\test.php с кодом:
А в папке C:\nginx-1.3.10\html\pma создадим файл test2.php с кодом:
Теперь запускаем наш веб-сервер (через файл start.bat) и смотрим что получилось:
Теперь у нас есть работающий вер-сервер.
Установка связки Nginx + Apache.
Выше рассматривался вариант установки чистой связки Nginx + PHP + MySQL. Далее мы рассмотрим установку Nginx как front-end к Apache. То есть все запросы изначально будут обрабатываться Nginx — это значит, что статичные файлы будут отдаваться сразу, а обработка остальных файлов будет передаваться серверу Apache.
Для установки нам понадобится:
— установленный Apache
— актуальная версия Nginx
Вместо чистого Apache можно применять любую сборку веб-сервера основанную на Apache: например Denwer (Денвер), TopServer, XAMPP и тому подобное, либо собрать связку Apache + PHP + MySQL самому вручную.
Итак, порядок установки:
Этап 1. Перенос Apache на порт отличный от 80-го.
Этап 2. Настройка Nginx для работы с Apache.
Этап 3. Установка и настройка RPAF в Apache.
Этап 1. Перенос Apache на порт отличный от 80-го.
Изначально Apache настроен на прослушивание 80-го порта, что вполне логично и правильно, но в нашем случае 80-й порт будет прослушиваться Nginx’ом, поэтому и требуется перенести Apache на другой порт.
Открываем C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf и ищем в нем строчку Listen 80 (либо свой номер порта, если у Вас веб-сервер был установлен на другом порту) и заменяем ее на Listen 127.0.0.1:81
Также просматриваем строчки задания виртуальных хостов (если они есть) и меняем их тоже:
находим NameVirtualHost *:80 и меняем на NameVirtualHost *:81
находим все и меняем на
После этого сохраняем изменения и перезапускаем Apache.
Теперь можно проверить, что веб-сервер отвечает на порту 81 (Для проверки был создан файл test.php содержащий ).
Этап 2. Настройка Nginx для работы с Apache.
Открываем файл конфига C:\nginx-1.3.10\conf\nginx.conf и заменяем его на код:
#2 рабочих процесса
worker_processes 2;
# лог для ошибок
error_log C:/nginx-1.3.10/logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
events <
# максимум рабочих соединений
worker_connections 2000;
>
http <
include mime.types;
default_type application/octet-stream;
# Формат лога
#log_format main ‘$remote_addr — $remote_user [$time_local] «$request» ‘
# ‘$status $body_bytes_sent «$http_referer» ‘
# ‘»$http_user_agent» «$http_x_forwarded_for»‘;
# Лог доступа всего веб-сервера
#access_log logs/access.log main;
# Таймаут при чтении заголовка запроса клиента
client_header_timeout 3m;
# Таймаут при чтении тела запроса клиента
client_body_timeout 3m;
# Таймаут при передаче ответа клиенту
send_timeout 3m;
# Таймаут keep-alive соединения
keepalive_timeout 2m;
server <
# Слушать 80 порт
listen 80;
# Использовать следующие хосты.
server_name _;
# Лог доступа для конкретного виртуального хоста
#access_log logs/host.access.log main;
# Отдаем статику напрямую
location
* \.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|js)$ <
root C:/Program Files/Apache Software Foundation/Apache2.2\htdocs;
access_log off;
expires 30d;
>
# Запрещаем обращение к файлам .htaccess и .htpasswd
location
/\.ht <
deny all;
>
# Передаем запрос Apache
location / <
# Адресс и порт Apache
proxy_pass http://127.0.0.1:81/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# Максимальный размер тела запроса клиента
client_max_body_size 10m;
client_body_buffer_size 128k;
#client_body_temp_path tmp/client_body_temp;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
#proxy_temp_path tmp/proxy_temp;
#error_page 404 /404.html;
# При перечисленных ошибках показывать статическую страницу /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html <
root html;
>
>
>
Комментарии по тексту есть, но все же поясню пару мест.
Если на сервере будет находиться не один сайт, как в конфиге выше, а несколько, то для каждого должен быть указан свой блок server. Причем первый блок server считается сервером по умолчанию и он будет вызываться при обращении по IP или хосту не описанному ни в одном server_name.
В server_name может быть указано: «_» — аналог default в Apache; один или несколько хостов через пробел; хост начинающийся с точки — описывает все его поддомены
Приведу пример каркаса структуры для пояснения:
.
http <
.
server <
# хост по умолчанию
server_name _;
.
>
server <
# несколько перечисленных хостов
server_name pupkin.ru www.pupkin.ru;
.
>
server <
# все поддомены vasia.ru
server_name .vasia.ru;
.
>
Этап 3. Установка и настройка RPAF в Apache.
Так как у нас обращение к Apache идет не напрямую, а через Nginx, то теперь в REMOTE_ADDR у нас не пользовательский IP, а IP-адрес сервера, на котором расположен Nginx. Поэтому на помощь приходит RPAF, он берет тело заголовка X-Forwarded-For, присланного от фронтенда и формирует в Apache из него REMOTE_ADDR.
Таким образом заголовок REMOTE_ADDR снова имеет пользовательский IP.
Скачиваем mod_rpaf
mod_rpaf.rar
и распаковываем в папку модулей Apache (C:\Program Files\Apache Software Foundation\Apache2.2\modules). После этого открываем C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf и добавляем в конец файла следующий код:
LoadModule rpaf_module modules/mod_rpaf.so
RPAFenable On
RPAFsethostname On
RPAFheader X-Forwarded-For
RPAFproxy_ips 192.168.1.26 127.0.0.1
Вместо 192.168.1.26 укажите IP адрес сервера, на котором расположен Nginx.
Теперь сохраняем изменения и перезапускаем Apache.
Также желательно перенести папку C:\Program Files\Apache Software Foundation\Apache2.2\icons в папку C:\Program Files\Apache Software Foundation\Apache2.2\htdocs. Без этого при просмотре содержимого каталогов (опция Indexes в Apache) Nginx будет пытаться загрузить несуществующие иконки для файлов.