Пара вопросов о nginx
Maxim Dounin
mdounin at mdounin.ru
Sun Oct 25 02:09:40 MSK 2009
Hello!
On Sat, Oct 24, 2009 at 05:56:27PM -0400, Ck-NoSFeRaTU wrote:
> Хочу сделать небольшой архив файлов, но помимо индекса файлов нужны описания и
> скриншоты. Никакие php-цмски не хочу юзать, perl тоже не хочется
> использовать. Немного модифицировал autoindex с закосом на lighttpd и
> возможностью вставлять свои куски текста в страничку. Но появились некоторые
Был такой fancy index module, не знаю жив ли ещё.
> трудности. Почему при такой конфигурации:
>
> if (-e $request_filename/.description.txt) {
> autoindex_readme_path .description.txt;
> }
> if (-e $request_filename/.cover.jpg) {
> autoindex_readme_text ""; autoindex_footer_text "";
> }
>
> присваиваются значения для параметров только в последнем if? Т.е.
> autoindex_readme_path получается пустой, хотя если удалить второй if с
> содержимым - всё путём. Попытался это обойти с помощью нескольких условий, типа
> такого:
Потому что if() работает не так, как вам кажется. Есть мнение,
что использовать if() в конфигах nginx'а имеет смысл в том и
только в том случае, если вам не хватает приключений.
[...]
> if (-e $request_filename/.description.txt && $found = 0) {
> param2=y;
> }
>
> Но опять же столкнулся с тем, что OR/AND похоже не поддерживаются, как и скажем
> else. Планируется ли добавить такую поддержку?
Врядли. Сделать сейчас это можно через регулярные выражения.
[...]
> Также вопрос: а как можно приравнивать параметр к переменной? Т.е.
> что-то типа:
> set $param "123";
> autoindex_readme_text $param;
>
> Хочется чтобы значение autoindex_readme_text получилось 123, а получается
> $param :-/
Поддержку переменных надо реализовавать в модуле. Смотрите
примеры в коде, там их много хороших и разных.
А макросов в конфигах nginx'а нет и никогда не было - sed всех
спасает.
> Возможно кто-то писал модули, может подскажете, а как правильно, с точки зрения
> всех прослоек работы с файлами, кешированием и прочим, имея путь до файла в
> ngx_str_t получить содержимое файла, скажем в другой ngx_str_t? Я так понял
> копать нужно в сторону ngx_open_cached_file, но что-то пока не получается.
Use The Source, Luke!
Но правильнее всего - вообще не получать содержимое файла в другой
ngx_str_t. Если задача - отдать содержимое файла клиенту, то
решение - подзапрос. Или вообще выдать ssi инструкцию, а дальше
пусть ssi модуль с этим и разбирается.
> Также видел в рассылке за 2005 год сообщения о том, что неплохо бы реализовать
> переменную $request_dir, содержащую имя папки запроса, но я так понял дело
> до реализации не дошло?
Не дошло.
> ЗЫ. Пока всё сделал забивая все описания в конфиг, разграничивая location`ами,
> но это и не удобно и некошерно. Получилось так:
Именно location - единица конфигурации в nginx, так что как раз
разнесение разных конфигураций по разным location'ам - правильно и
единственно верно.
Maxim Dounin
More information about the nginx-ru
mailing list