Делюсь опытом установки сервера 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) (можно скачать 143 и распаковать в папку 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
1 Комментатор 21 04-09-2010 20:35
а как сюдаже mod_rpaf прикрутить , а то IP серверные у пользователей отоброжаются...
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.