вторник, 14 февраля 2012 г.

Настройка nginx для работы exilog.


Небольшая заметка о настройке nginx для работы exilog. Опции exilog я не привожу, исходя из соображений безопасности и тривиальности настройки. Сам nginx не умеет CGI, для этого придется проксировать CGI-запросы на маленький производительный сервис thttpd. Собственно, сами действия:
1. Скачать thttpd

2. Распаковать


3. Конфигурирование
./configure —prefix=/usr

4. Наложить патч (http://wiki.nginx.org/ThttpdRealIP)

По умолчанию, thttpd не пропускает заголовок X-Forwarded-For. Этот патч преобразует X-Forwarded-For в Remote-Addr.

--- thttpd-2.25b/libhttpd.c 2003-12-25 20:06:05.000000000 +0100
+++ thttpd-2.25b-patched/libhttpd.c 2005-01-09 00:26:04.867255248 +0100
@@ -2207,6 +2207,12 @@
if ( strcasecmp( cp, "keep-alive" ) == 0 )
hc->keep_alive = 1;
}
+ else if ( strncasecmp( buf, "X-Forwarded-For:", 16 ) == 0 )
+ { // Use real IP if available
+ cp = &buf[16];
+ cp += strspn( cp, " \t" );
+ inet_aton( cp, &(hc->client_addr.sa_in.sin_addr) );
+ }
#ifdef LOG_UNKNOWN_HEADERS
else if ( strncasecmp( buf, "Accept-Charset:", 15 ) == 0 ||
strncasecmp( buf, "Accept-Language:", 16 ) == 0 ||

5. Компиляция
make
Если вылазит ошибка
htpasswd.c:52: ошибка: несовместимые типы для ‘getline’
Нужно отредактировать файл htpasswd.c и заменить название функции 'getline' by 'my_getline', поскольку такое название уже существует.

6. Установка
make install

cp ./contrib/redhat-rpm/thttpd.init /etc/init.d/thttpd
cp ./contrib/redhat-rpm/thttpd.conf /etc/

7. Отредактировать /etc/thttpd.conf, привести к виду:
dir=/var/www
#chroot
user=apache
logfile=/var/log/thttpd.log
pidfile=/var/run/thttpd.pid
port=9000
cgipat=**.pl
host=127.0.0.1
# charset=iso-8859-1

8. Добавить в автозагрузку thttpd
chkconfig --add thttpd

9. Настройка nginx
location /exilog {
proxy_pass http://127.0.0.1:9000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}

10. Перезапуск nginx 
service nginx reload

Литература:

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

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