nginx: длинные имена файлов в списке каталогов


8

Используя nginx / 1.4.1 с OpenBSD 5.4, 64bit:

введите описание изображения здесь

Как мы можем установить nginx для отображения полного имени файла (или, по крайней мере, показать больше из имени файла, чем по умолчанию) при использовании списка каталогов?

Погуглив, только дал мне это:

http://forum.nginx.org/read.php?2,124400,167420#msg-167420
January 18, 2011 08:36PM
fagtron
I looked all over the net and wasn't able to find this answer anyway, so I looked into the nginx source files and it's very easy.

Simply modify the file located at [b]src/http/modules/ngx_http_autoindex_module.c[/b] and then compile.

Change these lines:

[b]#define NGX_HTTP_AUTOINDEX_PREALLOCATE 50

#define NGX_HTTP_AUTOINDEX_NAME_LEN 50[/b]

to whatever you want, such as:

[b]#define NGX_HTTP_AUTOINDEX_PREALLOCATE 100

#define NGX_HTTP_AUTOINDEX_NAME_LEN 100[/b]

And then compile and restart nginx. That's it !!!

Вопрос : нет ли другого способа, чем перекомпилировать его?


Вот руководство, как изменить исходный код
rubo77

Ответы:


5

Согласно документации ngx_http_autoindex_module , конфигурация ширины столбца для автоматически проиндексированных страниц недоступна. Компиляция из исходного кода будет единственным способом сделать это изменение.

Одним из вариантов может быть использование языка сценариев (например php, rubyили python) , чтобы выполнить список каталогов для вас.

Преимущества включают в себя:

  • полностью настраиваемый через CSS, JavaScript и т. д.
  • точный контроль над списком файлов

Предостережения:

  • требует CGI, например, php-fpmилиpassenger
  • требует больше конфигурации

1
компиляция сделала
свое дело

есть ответ с параметрами , которые должны быть изменены для компиляции - serverfault.com/questions/310532/...
Sysanin

5

Вы можете попробовать модуль fancyindex с его параметром fancyindex_name_length для настройки длины имени файла.


1
это должен быть принятый ответ. обратите внимание, что fancyindex_name_lengthне упоминается на странице nginx, но находится на странице модуля github. обратите внимание, что этот модуль входит в nginx-extrasкомплект.
августа

1

Поскольку, кажется, нет способа достичь этого, кроме компиляции nginx из исходного кода, это будет обходной путь :

Вы можете автоматически создать файл index.html в текущей папке, содержащий полный путь, с помощью этого сценария:

#!/bin/bash
# scriptname: /usr/local/sbin/directory-long-index.sh
# 
# the directory_root without slash at the end:
WEB=/var/www/
#reacheable url from inside the server:
URL=http://localhost

P=$(pwd|sed "s|$WEB/||")
echo "download $URL/$P/ to index.html"
curl "$URL/$P/" -o index.html
sed -i 's|href="\(.*\)".*</a>|style="display:inline-block;min-width:500px" href="\1">\1</a>|' index.html

внутри папки просто позвоните:

source /usr/local/sbin/directory-long-index.sh

источник: https://gist.github.com/rubo77/c7a9434eb104c00bf8772b2278284360


Другим обходным решением будет создание простого списка каталогов с нуля с

for i in *; do echo '<a href="'$i'">'$i'</a><br>'>>index.html; done

Это даже отдаленно не связано с вопросом пользователя.
pgoetz

Конечно да. Это обходной путь, который вы можете использовать, если не хотите компилировать nginx из исходного кода
rubo77

Прости за это; при первом чтении я не смог понять, что это задуман как предварительный шаг для запуска на сервере. Конечно, это засоряет вашу структуру каталогов файлами index.html, и ее необходимо будет перезапускать каждый раз, когда изменяется основная файловая система, но вы, тем не менее, правы.
pgoetz

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.