Nginx + Apache2 (XAMPP) на Windows

Просмотров: 10307Комментарии: 4
Технологии

Делюсь опытом установки сервера nginx для работы в качестве фронтэнда с веб-сервером apache2 (в среде XAMPP на ОС Windows). Понимаю, что это в своем роде извращение, такого рода разработку лучше проводить в родной *nix среде, но так уж сложилось, что коней на переправе менять некогда.


В природе существует сборка под названием NIMP, которая уже включает как XAMPP, так и nginx, однако версия последнего там (7.59) меня огорчает, поэтому решил попробовать сделать все самостоятельно. Я не ставил mod_rpaf, потому что для моих целей instant debugging он пока не нужен. В сборке NIMP он интегрирован.


1) скачиваем дистрибутив для Windows с официального сайта (я качал последний актуальный -- 8.32)


2) распаковываем его ...да куда угодно, откуда будет удобно работать. Я сделал это в папку d:\xampp (см. иллюстрацию)




3) в распакованной папке правим конфиг \conf\nginx.conf (оригинальный вариант полезно сохранить и изучить). Для начала можете взять мой, скомпилированный из разных источников (сам я не большой специалист по конфигам, к сожалению). Что нужно заменить -- смотрим в комментариях по коду. Обратите внимание: нжинкс будет слушать порт 80.

[code lang="text"]

worker_processes  1;

#error_log  logs/error.log;

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {

    worker_connections  1024;

}

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;

    sendfile        on;

   

    keepalive_timeout  65;

    #gzip  on;

    upstream backend {

        # исправьте порт на тот, который будет слушать апач

        server 127.0.0.1:88;

    }

   

    server {

        # нжинкс слушает порт 80

        listen       80;

        # впишите ваши хосты

        server_name  test.loc *.test.loc;

        client_max_body_size 101M;

        # статику отдаем нжинксом напрямую

        # пропишите путь к ее корневой папке

        location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ {

            root D:/xampp/htdocs/test.loc/www;

        }

       

        # запрет на доступ к апачевским .ht* файлам   

        location ~ /\.ht {

            deny  all;

        }

        # настройки нжинкса как прокси для апача

        location / {

            proxy_pass http://backend/;

            proxy_set_header Host $host;

            # без mod_rpaf $remote_addr==127.0.0.1, но я это оставил

            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;

        }

      

    }

}

[/code]


4) правим конфиг апача apache\conf\httpd.conf -- меняем директиву Listen 80 на Listen 127.0.0.1:88 (то есть апач будет слушать только собственный IP на порту 88). Вместо 88 можно выбрать любой незанятый порт.


5) сейчас нужно сделать аналогичную замену в виртуальных хостах (у меня они лежат в apache\conf\extra\httpd-vhosts.conf): заменить <VirtualHost *:80> на <VirtualHost *:88>.    


6) для удобства я наштамповал bat-файлов, предназначенных для обслуживания сервера: запуска (nginx_start.bat), останова (nginx_quit.bat, nginx_stop.bat), проверки конфига (nginx_test.bat) (можно скачать 124 и распаковать в папку nginx). Они не отличаются дружелюбностью (nginx_start.bat после старта нжинкса показывает курсор -- тогда можно закрывать консоль вручную; остальные закрываются по any key), но задачу выполняют. Рекомендую избегать запуска несколько раз подряд (без останова между ними), так как скрипт останова после этого не тормозит сервер, приходится вручную убивать процесс.


Вот, наверное, и все. Запускаем апач, затем нжинкс. А, есть еще "фича" -- при работе с Коханой (2.3.х) в случае несловленного исключения страница ошибки начинается неким числом, а заканчивается 0. Насколько я понял из гугления, эта проблема иногда встречается при работе связки nginx+apache и обусловлена некорректной работой апача. Если мешает, пропишите в секции виртуального хоста (или глобально, но я предпочитаю в секции хоста)

[code lang="text"]

SetEnv force-response-1.0 1

SetEnv downgrade-1.0 1

[/code]

или

[code lang="text"]

<IfModule setenvif_module>

    BrowserMatch ".*" downgrade-1.0 force-response-1.0

</IfModule>

[/code]

У меня после этого проблема исчезла.


Успешной разработки!

Комментариев: 4 RSS

2 Комментатор 21 04-09-2010 20:59

выручило:

LoadModule rpaf_module modules/mod_rpaf.so

RPAFenable On

RPAFsethostname On

RPAFheader X-Forwarded-For

RPAFproxy_ips 127.0.0.1

можите не отвечать)

3 SysOp 20-11-2010 17:27

Напишите пожалуйста подробнее про mod_rpaf, а то у меня тоже Ip не отображается...

4 Александр Купреев 22-11-2010 15:09

а что подробнее? Берете скомпилированный для Win32 модуль, например, отсюда http://www.gknw.net/development/apache/httpd-2.2/win32/modules/ . Ну и там читаете инструкцию как подключить в httpd.conf.

Оставьте комментарий!


Используйте нормальные имена.

     

  

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email. При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д., а также подписку на новые комментарии.

MaxSiteAuth. Войти через loginza

(обязательно)