Пара вопросов о 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