Front-end Nginx к Apache на Windows

В этой статье будет рассмотрена ситуация, когда в роли web-сервера выступает сервер с операционной системой Windows Server.

nginx [engine x] — это HTTP-сервер и почтовый прокси-сервер. Работает он очень быстро и предназначен в основном для раздачи статического контента, хотя может работать и самостоятельно. Скачать последнюю версию можно здесь, а почитать документацию можно здесь.

Небольшое замечание: Здесь представлена конфигурация сервера alexeev.pro, ваши настройки должны содержать соответствующие адреса.

1. Установка nginx

nginx/Windows работает с Win32 API (не эмуляция Cygwin). В качестве метода обработки соединений используется select, поэтому не стоит ожидать высокой производительности и масштабируемости: пока это бета-версия. На данный момент доступна практически вся функциональность, что и в nginx/Unix, за исключением XSLT-фильтра, фильтра изображений, модуля geoip и встроенного perl’а.

Распаковываем дистрибутив на диск C:, и только на диск C:, переходим в каталог nginx-1.0.0 и запускаем nginx:

cd c:\
unzip nginx-1.0.0.zip
cd nginx-1.0.0
start nginx

Если nginx не запустился, нужно смотреть причины в error_log. Если же error_log не создался, то об этом сообщается в Event Log.

nginx/Windows работает как обычное приложение (не сервис) и управляется следующим образом:

nginx -s stop    быстрое завершение
nginx -s quit    плавное завершение
nginx -s reload    изменение конфигурации, запуск новых рабочих процессов с новой конфигурацией, плавное завершение старых рабочих процессов
nginx -s reopen    переоткрытие лог-файлов

Небольшое замечание: Для удобства рекомендую прописать путь к nginx в системной переменной path.

2. Конфигурирование nginx

Файл конфигурации nginx лежит в папке conf и называется nginx.conf. Открывается блокнотом. В общем виде настройки сводятся к переносу сервера apache на порт отличный от 80 и установке на его место nginx. В данном случае apache перенесен на 88 порт.

Вот содержимое файла с сервера alexeev.pro:

worker_processes  1;

error_log   logs/error.log;

events {
 worker_connections  1024;
}

http {
 include       mime.types;
 default_type  application/octet-stream;

 sendfile        on;
 keepalive_timeout  65;

 # Директива определяет параметры сервера apache.
 upstream backend {
 server 127.0.0.1:88;
 }

 # Директива задаёт имя и параметры сервера.
 server {
 listen       80;
 server_name  alexeev.pro www.alexeev.pro;

 # Передаем динамику серверу apache, статику оставляем серверу nginx.
 location ~* \.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|pdf|txt|tar|js)$ {
 root c:/Apache2.2/htdocs;
 }

 # Запрещаем обращение к .ht
 location ~ /\.ht {
 deny  all;
 }

 # Передача запроса серверу apache.
 location / {
 # Адрес сервера apache
 proxy_pass http://backend/;
 proxy_set_header Host $host;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $remote_addr;
 proxy_connect_timeout 120;
 proxy_send_timeout    120;
 proxy_read_timeout    180;
 client_max_body_size       10m;
 client_body_buffer_size    128k;
 }

 # redirect server error pages to the static page /50x.html
 #
 error_page   500 502 503 504  /50x.html;
 location = c:/nginx/html/50x.html {
 root   html;
 }

}

3. Конфигурирование Apache

Конфигурирование apache заключается в изменении порта на 88 в файле httpd.conf:

здесь:

Listen 88

и здесь:

ServerName www.alexeev.pro:88

а также в файле .htaccess, если у вас несколько виртуальных хостов.

Теперь все должно работать, но у некоторых возникают проблемы, тогда без модуля mod_rpaf не обойтись, скачать можно здесь. Распаковываем архив и помещаем файл mod_rpaf в папку C:\Apache2.2\modules. В файле httpd.conf после блока подключения модулей пишем:

LoadModule rpaf_module modules/mod_rpaf.so
RPAFenable On
RPAFsethostname On
RPAFheader X-Forwarded-For
RPAFproxy_ips 172.16.1.34 127.0.0.1

Вместо 172.16.1.34 должен стоять либо локальный адрес вашего сервера, либо внешний. На сервере alexeev.pro данный модуль не подключен, все работает правильно без него! Если nginx и apache установлены на одном сервере, как на сервере alexeev.pro, то проблем не возникнет, данная проблема возникает когда nginx и apache находятся на разных машинах.

Настройка закончена, теперь осталось только запустить apache и nginx и наблюдать возросшую скорость!

Front-end Nginx к Apache на Windows: 2 комментария

  1. Вместо 172.16.1.34 должен стоять либо локальный адрес вашего сервера, либо внешний. На сервере alexeev.pro данный модуль не подключен, все работает правильно без него! Если nginx и apache установлены на одном сервере, как на сервере alexeev.pro

    бред, а не че что пхпшка присваивает всем юзерам ип 127.0.0.1 ?

Добавить комментарий для Алексей Алексеев Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *