nginx и приятности
А помнишь, как все начиналось?
А начиналось всё очень прозаично, назрела проблема создания локального зеркала для eset 3 ветки, зеркало для 2-го тогда уже давно функционировало. Было раннее утро и желание заниматься чем-то монотонным тогда отсутствовало напрочь. Бывает такое, ну Вы знаете, да?
Расположение наших войск.
На сервере стоял (и стоит, и стоять будет, тьфу-тьфу) nginx, оный очень шустро отдаёт статику клиенту, потому что… ой да не буду я рассказывать, как он работает, на то есть google://. Так вот, сервер в интранете, живет под OpenBSD, nginx был 0.7.14, последний, на момент желания «а я новенький хочу», оказался 0.7.21, его и взял. И очень-очень захотелось отдавать юзерам листинг директории /eset_upd/ в браузер, но обычный у nginx довольно уныл. Красивости!
Копаем, шеф!
Копать, конечно же, надо было в Google. Про nginx существует очень хорошая вики – http://wiki.codemongers.com/. Идём на http://wiki.codemongers.com/NginxNgxFancyIndex, смотрим — радуемся, fancyindex называется модуль (https://connectical.com/news/13 — git, спасибо deniszh ).
Распаковываем nginx-0.7.21.tar.gz в текущую директорию:
$ tar zxvf nginx-0.7.21.tar.gzНаблюдаем как оно всё распаковалось.
$ cd nginx-0.7.21/Хорошее правило — всегда сначала набирать configure --help и медленно вдумчиво смотреть какие флаги могут быть переданы.
$ ./configure --helpПосмотрели, записали. Мой набор таков:
$ ./configure --conf-path=/etc/nginx.conf --pid-path=/var/run/nginx.pid --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx-error.log --http-client-body-temp-path=/var/spool/nginx/client_body_temp --http-fastcgi-temp-path=/var/spool/nginx/fastcgi_temp --http-proxy-temp-path=/var/spool/nginx/proxy_temp --user=_www-data --group=_www-datauser и group можете выставить по своему желанию, Вы же знаете какие у Вас юзеры и группы существуют в системе, да? ;-) А так же обязательно проверьте все пути.
Запускаем, это пока проверочный configure без подключения модуля. Создался Makefile? Если да — самое время попробовать собрать с модулем, если нет – читаем google на предмет ошибок. Распаковываем модуль рядом с nginx-0.7.21:
$ bunzip2 < nginx-fancyindex-0.1_beta5.tar.bz2 | tar xvf -теперь ещё раз запускаем configure у nginx, но на этот раз добавляем флаг —add-module и указываем путь к директории с модулем:
$ ./configure --conf-path=/etc/nginx.conf --pid-path=/var/run/nginx.pid --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx-error.log --http-client-body-temp-path=/var/spool/nginx/client_body_temp --http-fastcgi-temp-path=/var/spool/nginx/fastcgi_temp --http-proxy-temp-path=/var/spool/nginx/proxy_temp --user=_www-data --group=_www-data --add-module=../nginx-fancyindex-0.1_beta5
Отработала команда? Отлично. Копаем дальше:
$ makeОй, что-то не так…
gcc -c -O -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Wno-unused-function -Wunused-variable -Wunused-value -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/local/include -I objs -I src/http -I src/http/modules -I src/mail -o objs/addon/nginx-fancyindex-0.1_beta5/ngx_http_fancyindex_module.o ../nginx-fancyindex-0.1_beta5/ngx_http_fancyindex_module.c
../nginx-fancyindex-0.1_beta5/ngx_http_fancyindex_module.c: In function `make_content_buf':
../nginx-fancyindex-0.1_beta5/ngx_http_fancyindex_module.c:429: warning: implicit declaration of function `ngx_utf_length'
../nginx-fancyindex-0.1_beta5/ngx_http_fancyindex_module.c:430: warning: signed and unsigned type in conditional expression
../nginx-fancyindex-0.1_beta5/ngx_http_fancyindex_module.c:571: warning: implicit declaration of function `ngx_utf_cpystrn'
../nginx-fancyindex-0.1_beta5/ngx_http_fancyindex_module.c:571: warning: assignment makes pointer from integer without a cast
*** Error code 1
Stop in /home/fd/sources/nginx-0.7.21 (line 986 of objs/Makefile).
*** Error code 1
Stop in /home/fd/sources/nginx-0.7.21 (line 3 of Makefile).Шеф, всё пропало!
Нет-нет, не всё так ужасно, просто fancyindex не может корректно собраться с nginx 0.7.* ветки без патча.
Правильно, google://. http://www.lexa.ru/nginx-ru/msg18958.html и забираем патч, кладём его рядом с nginx-fancyindex-0.1_beta5 в, ну скажем, patch, и командуем магическое
$ patch -p0 < patch
видим:
Hmm... Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|diff -ru nginx-fancyindex-0.1_beta5/ngx_http_fancyindex_module.c
|nginx-fancyindex-0.1_beta5-patched/ngx_http_fancyindex_module.c
|--- nginx-fancyindex-0.1_beta5/ngx_http_fancyindex_module.c 2007-09-29
|01:02:05.000000000 +0400
|+++ nginx-fancyindex-0.1_beta5-patched/ngx_http_fancyindex_module.c
|2008-08-11 17:33:42.810249087 +0400
--------------------------
Patching file nginx-fancyindex-0.1_beta5/ngx_http_fancyindex_module.c using Plan A...
Hunk #1 succeeded at 290.
Hunk #2 succeeded at 426.
Hunk #3 succeeded at 563.
doneПропатчилось. Если у Вас не пропатчилось – проверьте ещё раз пути и почитайте man patch. Ещё раз make:
$ makeСобралось, ставим.
$ sudo make installНу и осталось только в конфиге nginx указать для нужной директории
location /eset_upd/ {
fancyindex on;
fancyindex_exact_size off;
}Итог:

_________
Текст подготовлен в ХабраРедакторе
P.S. к страждущим. tar jxvf у меня не работает :) и pentium 133 c 48 мозгов :)



комментарии (85)